Member 14076805 Ответов: 1

Как написать JUnit-тестов для моей сортировки с объединением?


Привет , ребята, я написал несколько тестов junit для своего класса mergesort, но я не знаю, как написать тест для массива со 100 000 элементами , есть идеи?
<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

Gerry Schmitz

Что особенного в 100 000? Почему не миллион?

Member 14076805

Ничего. главное - это очень большое количество элементов

Gerry Schmitz

Почему "очень большое число"? Для чего вы "тестируете"? Как вы подтвердите результаты вашего теста?

Kornfeld Eliyahu Peter

Похоже, вы пытаетесь использовать unit-test для тестирования производительности - не делайте этого!

1 Ответов

Рейтинг:
0

Ephimme

Ну, несмотря на то, что вы пытаетесь использовать unittests для неправильной задачи, вы можете попробовать сначала сгенерировать случайную последовательность чисел (или что угодно), затем использовать хорошо проверенный алгоритм сортировки для вычисления ожидаемого результата, а затем использовать его в качестве цели утверждения, как обычно.

Это довольно странно для unittesting, но все же это будет работать.