如何为我的mergesort编写junit测试? [英] How to write a junit test for my mergesort?

查看:92
本文介绍了如何为我的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆