Рубрики
Без рубрики

Утверждения JUnit

Утверждения JUnit, утверждение JUnit, исключение утверждения JUnit, требования утверждения JUnit, истина, ложь, утверждения Юпитера 5 единиц, броски утверждений, пример кода тайм-аута.

Автор оригинала: Pankaj Kumar.

Утверждения JUnit позволяют нам писать эффективные методы тестирования. JUnit 5-это последняя версия, и JUnit Jupiter предоставляет множество утверждений для утверждения различных типов утверждений.

Утверждения JUnit

JUnit Jupiter org.junit.jupiter.api.Утверждения класс предоставляет набор служебных методов для использования в нашем тестовом коде. Все эти методы статичны, поэтому мы можем импортировать их и писать свободный код. Почти все эти методы перегружены для поддержки примитивов, объектов, Коллекций, потоков, массивов и т. Д.

import static org.junit.jupiter.api.Assertions.*;

Давайте рассмотрим некоторые из важных методов утверждения JUnit на примере.

сбой()

Это используется для провала теста, это полезно, когда ваш метод тестирования находится в стадии разработки, и вы хотите указать, что с помощью fail-fast ваш тест. Существует много перегруженных методов fail (), давайте рассмотрим некоторые из них.

@Test
@DisplayName("This will Fail, don't worry!")
void test_fail() {
	fail();
	fail("Not yet implemented");
	fail(() -> {
		return "Not yet implemented";
	});
	fail("Not Yet Implemented", new RuntimeException("Explicitly Failed"));
	fail(new RuntimeException("Explicitly Failed"));

}

Мы можем предоставить пользовательское сообщение об ошибке и указать причину сбоя.

ассертНулл() и ассертНотНулл()

Эти методы используются для проверки того, является ли указанный объект нулевым или нет. Мы также можем указать пользовательское сообщение об ошибке.

@Test
@DisplayName("assertNull Examples")
void test_assertNull() {
	assertNull(null);
	//assertNull(new Object(), "assertNull Fail Message");
}

@Test
@DisplayName("assertNotNull Examples")
void test_assertNotNull() {
	assertNotNull(new Object());
	//assertNotNull(null, "assertNotNull Fail Message");
}

assertSame() и assertNotSame()

Эти методы используются для утверждения, что ожидаемые и фактические элементы совпадают или нет. JUnit использует эти методы для проверки того, ссылаются ли они на один и тот же объект или нет.

@Test
@DisplayName("assertSame Examples")
void test_assertSame() {
	assertSame("Hi", "Hi");
	// this will fail
	// assertSame("Hi", new String("Hi"), "My Failure Message");

}

@Test
@DisplayName("assertNotSame Examples")
void test_assertNotSame() {
	assertNotSame("Hi", "Hello");
	// this will fail
	//assertNotSame("Hi", "Hi", "assertNotSame Failure Message");

}

assertTrue() и assertFalse()

Утверждает, что заданное условие истинно или ложно .

@Test
@DisplayName("assertTrue Examples")
void test_assertTrue() {
	assertTrue(3 > 0);
	assertTrue(() -> {
		return true;
	});

	assertTrue(3 > 0, "assertTrue fail message");
	assertTrue(3 > 0, () -> {
		return "assertTrue fail message";
	});

	assertTrue(() -> {
		return true;
	}, "assertTrue fail message");
	assertTrue(() -> {
		return true;
	}, () -> {
		return "assertTrue fail message";
	});
}

@Test
@DisplayName("assertFalse Examples")
void test_assertFalse() {
	assertFalse(3 < 0);
	assertFalse(() -> {
		return false;
	});

	assertFalse(3 < 0, "assertFalse fail message");
	assertFalse(3 < 0, () -> {
		return "assertFalse fail message";
	});

	assertFalse(() -> {
		return false;
	}, "assertFalse fail message");
	assertFalse(() -> {
		return false;
	}, () -> {
		return "assertFalse fail message";
	});
}

assertEquals() и assertNotEquals()

Эти два метода используются для утверждения, что ожидаемые и фактические объекты равны или нет. Они используют метод equals() объекта для проверки равенства.

@Test
@DisplayName("assertEquals Examples")
void test_assertEquals() {
	assertEquals(10, 10);
	assertEquals(true, true, "assertEquals Failure Message");
	assertEquals("Hi", new String("Hi"));
	assertEquals(new File("test"), new File("test"));
}

@Test
@DisplayName("assertNotEquals Examples")
void test_assertNotEquals() {
	assertNotEquals(10, 100);
	assertNotEquals(true, false, "assertEquals Failure Message");
	assertNotEquals("Hi", new String("Hello"));
	assertNotEquals(new File("test"), new File("test1"));
}

assertArrayEquals()

Утверждает, что ожидаемые и фактические массивы глубоко равны. Элементы массивов сопоставляются индекс за индексом.

@Test
@DisplayName("assertArrayEquals Examples")
void test_assertArrayEquals() {
	String[] s1 = { "A", "B" };
	String[] s2 = { "A", "B" };
	assertArrayEquals(s1, s2);
	assertArrayEquals(s1, s2, "My Custom Failure Message");
}

утверждение итерируемых равенств()

Этот метод используется для итераций, чтобы проверить, равны они или нет. Обратите внимание, что базовая реализация может быть разной. Элементы сопоставляются индекс за индексом для обеспечения равенства.

@Test
@DisplayName("assertIterableEquals Examples")
void test_assertIterableEquals() {
	List l1 = new ArrayList<>(Arrays.asList("A", "B"));
	List l2 = new LinkedList<>(Arrays.asList("A", "B"));
	assertIterableEquals(l1, l2);
	assertIterableEquals(l1, l2, "Custom Failure Message");
}

assertThrows()

Утверждает, что выполнение предоставленного исполняемого файла вызывает исключение ожидаемого типа и возвращает исключение.

Если исключение не будет выдано или если будет выдано исключение другого типа, этот метод завершится ошибкой.

Этот метод следует иерархии наследования, поэтому утверждение пройдет, если ожидаемым типом является Исключение , а фактическим – Исключение времени выполнения .

@Test
@DisplayName("assertThrows Examples")
void test_assertThrows() {
	assertThrows(RuntimeException.class, () -> {
		throw new RuntimeException();
	});
	assertThrows(Exception.class, () -> {
		throw new RuntimeException();
	});

	// this will fail
	// assertThrows(IOException.class, () -> {throw new RuntimeException();});

	// assertThrows(IOException.class, () -> {throw new RuntimeException();}, "assertThrows Failure Message");
}

утверждение не растет()

Утверждает, что выполнение предоставленного исполняемого файла не вызывает никаких исключений. Этот метод принимает org.junit.jupiter.api.функцию.Исполняемый файл экземпляр в качестве аргумента. Исполняемый файл-это функциональный интерфейс , который может быть использован для реализации любого универсального блока кода, который потенциально может вызвать выбрасываемый объект.

class MyExecutable implements Executable {

	@Override
	public void execute() throws Throwable {
		System.out.println("Hello There!");
	}

}

Мы можем использовать лямбда-выражения для создания исполняемого файла, если мы не планируем его повторно использовать.

@Test
@DisplayName("assertDoesNotThrow Examples")
void test_assertDoesNotThrow() {
	assertDoesNotThrow(new MyExecutable());
	assertDoesNotThrow(new MyExecutable(), "assertDoesNotThrow custom message");
}

утверждать Все()

Утверждает, что все предоставленные исполняемые файлы не создают исключений. Мы можем передать массив, Поток или коллекцию Исполняемых объектов.

@Test
@DisplayName("assertAll Examples")
void test_assertAll() {
	assertAll(Arrays.asList(new MyExecutable()));
	assertAll(new MyExecutable());
	assertAll(Stream.of(new MyExecutable()));
	//assertAll("My Executables Heading Error Message", () -> {throw new Exception("Hi");});
}

время ожидания утверждения()

Утверждает, что выполнение предоставленного исполняемого файла завершается до превышения заданного времени ожидания.

Исполняемый файл будет выполнен в том же потоке, что и вызывающий код. Следовательно, выполнение исполняемого файла не будет предварительно прервано, если превышен тайм-аут.

@Test
@DisplayName("assertTimeout Examples")
void test_assertTimeout() {
	assertTimeout(Duration.ofSeconds(1), new MyExecutable());
	assertTimeout(Duration.ofSeconds(3), () -> {
		Thread.sleep(2000);
		System.out.println("Done");
	});
	// this will fail
	/*
	assertTimeout(Duration.ofNanos(1), () -> {
		Thread.sleep(20);
		System.out.println("Done");
	}, "assertTimeout Failure Message: Too less time to execute");
	*/
}

упреждающее утверждение Тайм-Аута()

Утверждает, что выполнение предоставленного исполняемого файла завершается до превышения заданного времени ожидания.

Исполняемый файл будет выполняться в потоке, отличном от потока вызывающего кода. Кроме того, выполнение исполняемого файла будет предварительно прервано, если будет превышен тайм-аут.

@Test
@DisplayName("assertTimeoutPreemptively Examples")
void test_assertTimeoutPreemptively() {
	assertTimeoutPreemptively(Duration.ofSeconds(1), new MyExecutable());
	assertTimeoutPreemptively(Duration.ofMillis(100), () -> System.out.println("Hello There"));
	// this will timeout for sure
	// assertTimeoutPreemptively(Duration.ofNanos(1), () -> System.out.println("Hello There"));

	/*
	assertTimeoutPreemptively(Duration.ofSeconds(1), () -> {
		throw new RuntimeException("");
	});
	*/
	assertTimeoutPreemptively(Duration.ofSeconds(1), new MyExecutable(),
			"MyExecutable didn't completed within 1 second");
	assertTimeoutPreemptively(Duration.ofSeconds(1), new MyExecutable(), () -> {
		return "MyExecutable didn't completed within 1 second";
	});
	/*
	assertTimeoutPreemptively(Duration.ofSeconds(2), () -> {
		throw new RuntimeException("");
	}, "MyExecutable didn't completed within 2 second");
	*/
}

Примеры утверждений JUnit Тест

На рисунке ниже показано представление результатов теста JUnit в Eclipse, когда был выполнен тестовый класс.

Резюме

JUnit Jupiter предоставляет множество утверждений, которые помогают нам писать свободный тестовый код. Всегда полезно импортировать эти статические методы утверждения, а затем написать чистый код.