如何为我的mergesort编写junit测试? [英] How to write a junit test for my mergesort?
本文介绍了如何为我的mergesort编写junit测试?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
大家好,我为我的mergesort类写了一些junit测试,但是我不知道怎么用100 000元素编写一个测试的数组,任何想法?
Hi guys , i wrote some junit tests for my mergesort class, but i don't know how to write a test for a array with 100 000 Element , any Idea?
<pre>
What I have tried:
<pre lang="java"><pre>p
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;
import de.hska.iwi.ads.sorting.Sort;
import java.util.Arrays;
public class MergesortTest extends SortTest {
@Override
public <E extends Comparable<E>> Sort<E> createSort() {
return new Mergesort<E>();
}
//Test für Integer
@Test
void testMergesortInteger() {
Integer[] a = { 2, 1, 7, 12, 5, 9, 8, 10 };
Integer[] result = { 1, 2, 5, 7, 8, 9, 10, 12 };
Mergesort<Integer> ms = new Mergesort<Integer>();
ms.sort(a);
assertTrue(Arrays.equals(a, result));
}
@Test
void testMergesortInteger1() {
Integer[] a = { 5, 2, 1, 2, 5, 4, 2 };
Integer[] result = { 1, 2, 2, 2, 4, 5, 5 };
Mergesort<Integer> ms = new Mergesort<Integer>();
ms.sort(a);
assertTrue(Arrays.equals(a, result));
}
//Test für String
@Test
void testMergesortString() {
String[] a = { "r", "a", "b", "d" };
String[] result = { "a", "b", "d", "r" };
Mergesort<String> ms = new Mergesort<String>();
ms.sort(a);
assertTrue(Arrays.equals(a, result));
}
@Test
void testMergesortString1() {
String[] a = { "baby", "a", "king", "to", "music", "blue" };
String[] result = { "a", "baby", "blue", "king", "music", "to" };
Mergesort<String> ms = new Mergesort<String>();
ms.sort(a);
assertTrue(Arrays.equals(a, result));
}
//Test für null
@Test
void testMergesortIntArrayIntNull() {
Integer[] a = null;
Mergesort<Integer> ms = new Mergesort<Integer>();
assertThrows(NullPointerException.class, () -> ms.sort(a));
}
//test for one element
@Test
void testMergesortOneElement() {
Integer[] a = { 5 };
Integer[] result = { 5 };
Mergesort<Integer> ms = new Mergesort<Integer>();
ms.sort(a);
assertTrue(Arrays.equals(a, result));
}
// test for two element
@Test
void testMergesortTwoElement() {
Integer[] a = { 5, 3 };
Integer[] result = { 3, 5 };
Mergesort<Integer> ms = new Mergesort<Integer>();
ms.sort(a);
assertTrue(Arrays.equals(a, result));
}
// test for 100.000 Element
推荐答案
尽管你试图将单位测试用于错误的任务,你可以先尝试生成随机的数字序列(或者你想要的任何东西),然后使用经过良好测试的排序算法来计算预期结果,然后像往常一样将它用作断言目标。
单元测试很奇怪但是它仍然有用。
Well despite the fact that you're trying to use unittests for wrong task, you could try first generating random sequence of numbers (or whatever you want), then using well-tested sorting algorithm to calculate expected result and then use it as assertion target as usual.
It's quite strange for unittesting but still it will work.
这篇关于如何为我的mergesort编写junit测试?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文