Assert в TestNG
Assert помогает нам проверять условия теста и принимать решения когда тест провален или выполнен. Тест считается выполненным только если завершается без вызова какого-либо исключения.
В приведенном далее коде мы проверяем соответствие title страницы значению «Google». Если соответствие не выполняется, тест проваливается.
public void testCaseVerifyHomePage()
driver = new FirefoxDriver();
Во-первых в этом коде мы создаем Firefox driver, затем переходим на страницу Google. И затем вызываем метод Assert.assertEquals().
Здесь можно сделать также другую запись: Assert.assertEquals(«Goooogle», driver.getTitle(), «Title not matching»);
TestNG поддерживает механизм проверок с помощью класса Assert, эти проверки играют важную роль при тестировании приложения.
А теперь давайте изменим заголовок страницы в коде и посмотрим на результат его выполнения:
public void testCaseVerifyHomePage()
driver = new FirefoxDriver();
Этот код выдаст следующую ошибку проверки:
java.lang.AssertionError: expected [Google] but found [Gooooogle]
Вариантов проверок в TestNG существует много. далее будут перечислены самые популярные:
assertEqual(String actual, String excepted): принимает два аргумента типа String и проверяет их на эквивалентность. В случае различий в аргументах тест будет провален.
assertEqual(String actual, String excepted, String message): принимает три аргумента и проверяет первые два на равенство. Если они не равны тест будет провален и в консоль будет выдано сообщение из третьего аргумента.
assertEquals(boolean actual, boolean excepted): принимает два аргумента типа boolean и проверяет их на равенство. Тест провален если аргументы не равны.
assertEquals(java.util.Collection actual, java.util.Collection excepted, java.lang.String message): принимает два объекта коллекций и проверяет, что они содержат одни и те же элементы в одном и том же порядке. В случае отличий тест будет провален и в консоль будет выдано сообщение из третьего аргумента.
Assert.assertTrue(condition): принимает один аргумент boolean и проверяет что он имеет значение true. Если нет, генерируется AssertionError.
Assert.assertTrue(condition, message): принимает один аргумент boolean и один String. Проверяет на истинность condition и если оно не равно true, генерируется AssertionError и в консоль выдается сообщение message.
Assert.assertFalse(condition): принимает один аргумент boolean и проверяет что он имеет значение false. Если нет, генерируется AssertionError.
Assert.assertFalse(condition, message): принимает один аргумент boolean и один String. Проверяет на истинность condition и если оно не равно false, генерируется AssertionError и в консоль выдается сообщение message.
Ниже расположен пример кода с проверками:
public void testCaseVerifyHomePage()
driver = new FirefoxDriver();
Assert.assertEquals(«Gooogle», driver.getTitle(), «Strings are not matching»);
//Напишите код для авторизации и методы isUserLoggedSuccessfully и isUserLoggedOut, возвращающие значения типа boolean.
Assert.assertTrue(isUserLoggedSuccessfully(), «User failed to login»);
Утверждения в JUnit 4 и JUnit 5
В этой статье мы подробно рассмотрим утверждения, доступные в JUnit.
После статей о переходе с JUnit 4 на JUnit 5 и A Guide to JUnit 5 мы подробно рассмотрим различные утверждения, доступные в JUnit 4 и JUnit 5.
Мы также отметим улучшения, внесенные в утверждения с помощью JUnit 5.
2. Утверждения
Утверждения — это служебные методы для поддержки утверждения условий в тестах ; эти методы доступны через класс Assert в JUnit 4 и Assertions в JUnit 5.
Чтобы повысить читабельность теста и самих утверждений, всегда рекомендуется статически импортировать соответствующий класс. Таким образом, мы можем напрямую ссылаться на сам метод утверждения без префикса представляющего класса.
Давайте начнем изучать утверждения, доступные в JUnit 4.
3. Утверждения в JUnit 4
В этой версии библиотеки утверждения доступны для всех типов примитивов, объектов и массивов (либо примитивов, либо объектов).
Порядок параметров в утверждении следующий: за ожидаемым значением следует фактическое значение; необязательно, первый параметр может быть строковым сообщением, представляющим вывод сообщения оцениваемого условия.
Есть только одно немного отличающееся определение утверждений assertThat , но мы рассмотрим его позже.
Начнем с assertEquals .
3.1. Утвердитьравно
Утверждение assertEquals проверяет, равны ли ожидаемые и фактические значения:
@Test public void whenAssertingEquality_thenEqual() String expected = "ForEach"; String actual = "ForEach"; assertEquals(expected, actual); >
Также можно указать сообщение, которое будет отображаться в случае сбоя утверждения:
assertEquals("failure - strings are not equal", expected, actual);
3.2. assertArrayEquals
Если мы хотим утверждать, что два массива равны, мы можем использовать assertArrayEquals:
@Test public void whenAssertingArraysEquality_thenEqual() char[] expected = 'J','u','n','i','t'>; char[] actual = "Junit".toCharArray(); assertArrayEquals(expected, actual); >
Если оба массива равны null , утверждение будет считать их равными:
@Test public void givenNullArrays_whenAssertingArraysEquality_thenEqual() int[] expected = null; int[] actual = null; assertArrayEquals(expected, actual); >
3.3. assertNotNull и assertNull
Когда мы хотим проверить, является ли объект нулевым , мы можем использовать утверждение assertNull :
@Test public void whenAssertingNull_thenTrue() Object car = null; assertNull("The car should be null", car); >
И наоборот, если мы хотим утверждать, что объект не должен быть нулевым, мы можем использовать утверждение assertNotNull.
3.4. assertNotSame и утверждениеSame
С помощью assertNotSame можно проверить, не ссылаются ли две переменные на один и тот же объект:
@Test public void whenAssertingNotSameObject_thenDifferent() Object cat = new Object(); Object dog = new Object(); assertNotSame(cat, dog); >
В противном случае, когда мы хотим убедиться, что две переменные ссылаются на один и тот же объект, мы можем использовать утверждение assertSame .
3.5. assertTrue и assertFalse
В случае, если мы хотим проверить, является ли определенное условие истинным или ложным , мы можем соответственно использовать утверждение assertTrue или assertFalse :
@Test public void whenAssertingConditions_thenVerified() assertTrue("5 is greater then 4", 5 > 4); assertFalse("5 is not greater then 6", 5 > 6); >
3.6. потерпеть неудачу
Утверждение о сбое не проходит тест, вызывая AssertionFailedError . Его можно использовать для проверки фактического возникновения исключения или когда мы хотим, чтобы тест не прошел во время его разработки.
Давайте посмотрим, как мы можем использовать его в первом сценарии:
@Test public void whenCheckingExceptionMessage_thenEqual() try methodThatShouldThrowException(); fail("Exception not thrown"); > catch (UnsupportedOperationException e) assertEquals("Operation Not Supported", e.getMessage()); > >
3.7. утверждать, что
Утверждение assertThat — единственное в JUnit 4, которое имеет обратный порядок параметров по сравнению с другими утверждениями.
В этом случае утверждение имеет необязательное сообщение об ошибке, фактическое значение и объект Matcher .
Давайте посмотрим, как мы можем использовать это утверждение, чтобы проверить, содержит ли массив определенные значения:
@Test public void testAssertThatHasItems() assertThat( Arrays.asList("Java", "Kotlin", "Scala"), hasItems("Java", "Kotlin")); >
Дополнительная информация о мощном использовании утверждения assertThat с объектом Matcher доступна в Testing with Hamcrest .
4. Утверждения JUnit 5
JUnit 5 сохранил многие из методов утверждений JUnit 4, но добавил несколько новых, использующих преимущества поддержки Java 8.
Также в этой версии библиотеки утверждения доступны для всех примитивных типов, объектов и массивов (либо примитивов, либо объектов).
Порядок параметров утверждений изменился, и параметр выходного сообщения был перемещен последним параметром. Благодаря поддержке Java 8 выходное сообщение может быть Supplier , что позволяет проводить его ленивую оценку.
Давайте приступим к просмотру утверждений, у которых уже есть эквивалент JUnit 4.
4.1. assertArrayEquals
Утверждение assertArrayEquals проверяет, что ожидаемый и фактический массивы равны:
@Test public void whenAssertingArraysEquality_thenEqual() char[] expected = 'J', 'u', 'p', 'i', 't', 'e', 'r' >; char[] actual = "Jupiter".toCharArray(); assertArrayEquals(expected, actual, "Arrays should be equal"); >
Если массивы не равны, в качестве вывода будет отображаться сообщение « Массивы должны быть равны ».
4.2. Утвердитьравно
Если мы хотим утверждать, что два числа с плавающей запятой равны, мы можем использовать простое утверждение assertEquals :
@Test void whenAssertingEquality_thenEqual() float square = 2 * 2; float rectangle = 2 * 2; assertEquals(square, rectangle); >
Однако, если мы хотим утверждать, что фактическое значение отличается на предопределенную дельту от ожидаемого значения, мы все еще можем использовать assertEquals , но мы должны передать значение дельты в качестве третьего параметра:
@Test void whenAssertingEqualityWithDelta_thenEqual() float square = 2 * 2; float rectangle = 3 * 2; float delta = 2; assertEquals(square, rectangle, delta); >
4.3. assertTrue и assertFalse
С утверждением assertTrue можно проверить, что предоставленные условия верны :
@Test void whenAssertingConditions_thenVerified() assertTrue(5 > 4, "5 is greater the 4"); assertTrue(null == null, "null is equal to null"); >
Благодаря поддержке лямбда-выражения можно указать BooleanSupplier для утверждения вместо логического условия.
Давайте посмотрим, как мы можем подтвердить правильность BooleanSupplier , используя утверждение assertFalse :
@Test public void givenBooleanSupplier_whenAssertingCondition_thenVerified() BooleanSupplier condition = () -> 5 > 6; assertFalse(condition, "5 is not greater then 6"); >
4.4. assertNull и assertNotNull
Когда мы хотим утверждать, что объект не является нулевым , мы можем использовать утверждение assertNotNull :
@Test void whenAssertingNotNull_thenTrue() Object dog = new Object(); assertNotNull(dog, () -> "The dog should not be null"); >
И наоборот, мы можем использовать утверждение assertNull , чтобы проверить, является ли фактическое значение null :
@Test public void whenAssertingNull_thenTrue() Object cat = null; assertNull(cat, () -> "The cat should be null"); >
В обоих случаях сообщение об ошибке будет получено ленивым способом, поскольку это Supplier .
4.5. assertSame и assertNotSame
Когда мы хотим утверждать, что ожидаемое и действительное относятся к одному и тому же объекту , мы должны использовать утверждение assertSame :
@Test void whenAssertingSameObject_thenSuccessfull() String language = "Java"; OptionalString> optional = Optional.of(language); assertSame(language, optional.get()); >
И наоборот, мы можем использовать assertNotSame .
4.6. потерпеть неудачу
Утверждение о сбое не проходит тест с предоставленным сообщением об ошибке, а также с основной причиной. Это может быть полезно, чтобы пометить тест, когда его разработка еще не завершена:
@Test public void whenFailingATest_thenFailed() // Test not completed fail("FAIL - test not completed"); >
4.7. утверждать все
Одним из новых утверждений, представленных в JUnit 5, является assertAll .
Это утверждение позволяет создавать сгруппированные утверждения, в которых все утверждения выполняются, а их ошибки сообщаются вместе. В деталях это утверждение принимает заголовок, который будет включен в строку сообщения для MultipleFailureError и поток исполняемого файла . «
Давайте определим сгруппированное утверждение:
@Test void givenMultipleAssertion_whenAssertingAll_thenOK() Object obj = null; assertAll( "heading", () -> assertEquals(4, 2 * 2, "4 is 2 times 2"), () -> assertEquals("java", "JAVA".toLowerCase()), () -> assertNull(obj, "obj is null") ); >
Выполнение сгруппированного утверждения прерывается только тогда, когда один из исполняемых файлов выдает исключение из черного списка ( например , OutOfMemoryError ).
4.8. assertIterableEquals
assertIterableEquals утверждает , что ожидаемые и фактические итерации полностью равны.
Чтобы быть равными, обе итерации должны возвращать одинаковые элементы в одном и том же порядке, и не требуется, чтобы две итерации были одного типа, чтобы быть равными.
С учетом этого давайте посмотрим, как мы можем утверждать, что два списка разных типов ( например, LinkedList и ArrayList ) равны:
@Test void givenTwoLists_whenAssertingIterables_thenEquals() IterableString> al = new ArrayList>(asList("Java", "Junit", "Test")); IterableString> ll = new LinkedList>(asList("Java", "Junit", "Test")); assertIterableEquals(al, ll); >
Точно так же, как и в assertArrayEquals , если обе итерации имеют значение null, они считаются равными.
4.9. ассерлайнсматч
assertLinesMatch утверждает , что ожидаемый список String соответствует фактическому списку.
Этот метод отличается от assertEquals и assertIterableEquals тем , что для каждой пары ожидаемых и фактических строк он выполняет следующий алгоритм:
- проверьте, совпадает ли ожидаемая строка с фактической. Если да, он продолжается со следующей парой
- обрабатывает ожидаемую строку как регулярное выражение и выполняет проверку с помощью String . Метод совпадения() . Если да, он продолжается со следующей парой
- проверьте, является ли ожидаемая строка маркером быстрой перемотки вперед. Если да, примените ускоренную перемотку вперед и повторите алгоритм с шага 1.
Давайте посмотрим, как мы можем использовать это утверждение, чтобы утверждать, что два списка String имеют совпадающие строки:
@Test void whenAssertingEqualityListOfStrings_thenEqual() ListString> expected = asList("Java", "\\d+", "JUnit"); ListString> actual = asList("Java", "11", "JUnit"); assertLinesMatch(expected, actual); >
4.10. assertNotEquals
В дополнение к assertEquals утверждение assertNotEquals утверждает, что ожидаемые и фактические значения не равны:
@Test void whenAssertingEquality_thenNotEqual() Integer value = 5; // result of an algorithm assertNotEquals(0, value, "The result cannot be 0"); >
Если оба равны null , утверждение не выполняется.
4.11. assertThrows
Для повышения простоты и удобочитаемости новое утверждение assertThrows предоставляет нам четкий и простой способ утверждать, генерирует ли исполняемый файл указанный тип исключения.
Давайте посмотрим, как мы можем подтвердить сгенерированное исключение:
@Test void whenAssertingException_thenThrown() Throwable exception = assertThrows( IllegalArgumentException.class, () -> throw new IllegalArgumentException("Exception message"); > ); assertEquals("Exception message", exception.getMessage()); >
Утверждение завершится ошибкой, если не будет выброшено исключение или если возникнет исключение другого типа.
4.12. assertTimeout и assertTimeoutPreemptively
В случае, если мы хотим утверждать, что выполнение предоставленного исполняемого файла заканчивается до заданного времени ожидания , мы можем использовать утверждение assertTimeout :
@Test void whenAssertingTimeout_thenNotExceeded() assertTimeout( ofSeconds(2), () -> // code that requires less than 2 minutes to execute Thread.sleep(1000); > ); >
Однако с утверждением assertTimeout предоставленный исполняемый файл будет выполняться в том же потоке вызывающего кода. Следовательно, выполнение поставщика не будет прервано превентивно, если тайм-аут превышен.
Если мы хотим быть уверены, что выполнение исполняемого файла будет прервано после истечения времени ожидания, мы можем использовать утверждение assertTimeoutPreemptively .
Оба утверждения могут принимать вместо Executable ThrowingSupplier , представляющий любой общий блок кода, который возвращает объект и потенциально может генерировать Throwable.
5. Вывод
В этом руководстве мы рассмотрели все утверждения, доступные как в JUnit 4, так и в JUnit 5.
Мы кратко рассказали об улучшениях, внесенных в JUnit 5, с введением новых утверждений и поддержкой лямбда-выражений.
Как всегда, полный исходный код этой статьи доступен на GitHub .
Примеры утверждений JUnit 5
Это продолжение туториала по JUnit 5. Введение опубликовано здесь.
Утверждения (Assertions) JUnit 5 помогают сравнить ожидаемый результат с фактическим результатом теста. Для простоты все утверждения JUnit Jupiter являются статическими методами в классе org.junit.jupiter.Assertions.
Не успешные утверждения будет генерировать исключение AssertionFailedError или его подкласс.
Оглавление
- assertEquals() и assertNotEquals()
- assertArrayEquals()
- assertIterableEquals()
- assertLinesMatch()
- assertNotNull() и assertNull()
- assertNotSame() и assertSame()
- assertTimeout() и assertTimeoutPreemptively()
- assertTrue() и assertFalse)
- assertThrows()
- Пример fail()
1. assertEquals() и assertNotEquals()
Метод Assertions.assertEquals() используется для подтверждения того, что ожидаемое и фактическое значения равны. Метод assertEquals() ммеет много перегруженных методов для разных типов данных, например, int, short, float, char и т. д. Он также выдает сообщения об ошибках, которые будут напечатаны в случае если тест будет неуспешным. например
Перегруженные методы
public static void assertEquals(int expected, int actual) public static void assertEquals(int expected, int actual, String message) public static void assertEquals(int expected, int actual, Supplier
Примеры
void test() < //Тест пройдёт Assertions.assertEquals(4, Calculator.add(2, 2)); //Тест не пройдёт Assertions.assertEquals(3, Calculator.add(2, 2), "Calculator.add(2, 2) test failed"); //Тест не пройдёт SuppliermessageSupplier = () -> "Calculator.add(2, 2) test failed"; Assertions.assertEquals(3, Calculator.add(2, 2), messageSupplier); >
Точно так же метод Assertions.assertNotEquals() используется для утверждения, что ожидаемое и фактическое значения НЕ равны. В отличие от метода assertEquals() , assertNotEquals() не содержит перегруженных методов для разных типов данных, а только параметр типа Object принимается.
Перегруженные методы
public static void assertNotEquals(Object expected, Object actual) public static void assertNotEquals(Object expected, Object actual, String message) public static void assertNotEquals(Object expected, Object actual, Supplier messageSupplier)
Примеры
void test() < //Тест пройдёт Assertions.assertNotEquals(3, Calculator.add(2, 2)); //Тест не пройдёт Assertions.assertNotEquals(4, Calculator.add(2, 2), "Calculator.add(2, 2) test failed"); //Тест не пройдёт SuppliermessageSupplier = () -> "Calculator.add(2, 2) test failed"; Assertions.assertNotEquals(4, Calculator.add(2, 2), messageSupplier); >
2. assertArrayEquals()
Метод assertArrayEquals() утверждает, что ожидаемый и фактический массивы равны.
Он также имеет перегруженные методы для различных типов данных, например, boolean[], char[], int[] и т. д. Он также выдает сообщения об ошибках, которые будут напечатаны в случае сбоя теста. например
Перегруженные методы
public static void assertArrayEquals(int[] expected, int[] actual) public static void assertArrayEquals(int[] expected, int[] actual, String message) public static void assertArrayEquals(int[] expected, int[] actual, Supplier messageSupplier)
Примеры
void testCase() < //Тест пройдёт Assertions.assertArrayEquals(new int[], new int[], "Array Equal Test"); //Тест не пройден, потому что порядок элементов отличается Assertions.assertArrayEquals(new int[], new int[], "Array Equal Test"); //Тест не пройден, потому что количество элементов другое Assertions.assertArrayEquals(new int[], new int[], "Array Equal Test"); >
3. assertIterableEquals()
Метод assertIterableEquals() утверждает,, что ожидаемые и фактические итерации полностью равны. «Глубокое равенство» означает, что количество и порядок элементов в коллекции должны быть одинаковыми, а повторяющиеся элементы должны быть одинаковыми.
У него также есть три перегруженных метода.
Перегруженные методы
public static void assertIterableEquals(Iterable expected, Iterable> actual) public static void assertIterableEquals(Iterable expected, Iterable> actual, String message) public static void assertIterableEquals(Iterable expected, Iterable> actual, Supplier messageSupplier)
Примеры
@Test void testCase() < IterablelistOne = new ArrayList<>(Arrays.asList(1,2,3,4)); Iterable listTwo = new ArrayList<>(Arrays.asList(1,2,3,4)); Iterable listThree = new ArrayList<>(Arrays.asList(1,2,3)); Iterable listFour = new ArrayList<>(Arrays.asList(1,2,4,3)); //Тест пройдёт Assertions.assertIterableEquals(listOne, listTwo); //Тест не пройдёт Assertions.assertIterableEquals(listOne, listThree); //Тест не пройдёт Assertions.assertIterableEquals(listOne, listFour); >
4. assertLinesMatch()
Он утверждает, что ожидаемый список строк соответствует фактическому списку. Логика сопоставления строки с другой строкой:
- проверьте, если expected.equals(actual) - если да, переходите к следующей паре
- в противном случае рассматривать expected как регулярное выражение и проверять переход String.matches(String) - если да, переходить к следующей паре
- в противном случае проверьте, является ли expected строка маркером быстрой перемотки вперед, если да, примените соответствующие строки быстрой перемотки вперед и перейдите к 1.
Допустимый маркер быстрой перемотки вперед - это строка, которая начинается и заканчивается >> и содержит не менее четырех символов. Любой символ между литералами быстрой перемотки вперед отбрасывается.
>>>> >> stacktrace >> >> single line, non Integer.parse()-able comment >>
5. assertNotNull() и assertNull()
AssertNotNull() утверждает, что фактическое значение НЕ равно нулю. Точно так же метод assertNull() утверждает, что это действительно так null . У обоих есть три перегруженных метода.
Перегруженные методы
public static void assertNotNull(Object actual) public static void assertNotNull(Object actual, String message) public static void assertNotNull(Object actual, Supplier messageSupplier) public static void assertEquals(Object actual) public static void assertEquals(Object actual, String message) public static void assertEquals(Object actual, Supplier messageSupplier)
Примеры
@Test void testCase() < String nullString = null; String notNullString = "howtodoinjava.com"; //Test will pass Assertions.assertNotNull(notNullString); //Test will fail Assertions.assertNotNull(nullString); //Test will pass Assertions.assertNull(nullString); // Test will fail Assertions.assertNull(notNullString); >
6. assertNotSame() и assertSame()
assertNotSame() утверждает, что ожидаемый и фактический не относятся к одному объекту. Точно так же метод assertSame() утверждает, что ожидаемый и фактический относятся к одному и тому же объекту.
У обоих есть три перегруженных метода.
Перегруженные методы
public static void assertNotSame(Object expected, Object actual) public static void assertNotSame(Object expected, Object actual, String message) public static void assertNotSame(Object expected, Object actual, Supplier<> messageSupplier) public static void assertSame(Object expected, Object actual) public static void assertSame(Object expected, Object actual, String message) public static void assertSame(Object expected, Object actual, Supplier messageSupplier)
Примеры
@Test void testCase() < String originalObject = "howtodoinjava.com"; String cloneObject = originalObject; String otherObject = "example.com"; //Test will pass Assertions.assertNotSame(originalObject, otherObject); //Test will fail Assertions.assertNotSame(originalObject, cloneObject); //Test will pass Assertions.assertSame(originalObject, cloneObject); // Test will fail Assertions.assertSame(originalObject, otherObject); >
7. assertTimeout() и assertTimeoutPreemptively()
Методы assertTimeout() и assertTimeoutPreemptively() используются для тестирования долго выполняющихся задач. Если заданная задача в тесте занимает больше указанной продолжительности, тест завершится неудачно.
Единственная разница между обоими методами заключается в том, что в assertTimeoutPreemptively() выполнение Executable или ThrowingSupplier будет прервано с упреждением при превышении тайм-аута. В случае assertTimeout() , Executable или ThrowingSupplier не будет прервана.
Перегруженные методы
public static void assertTimeout(Duration timeout, Executable executable) public static void assertTimeout(Duration timeout, Executable executable, String message) public static void assertTimeout(Duration timeout, Executable executable, Supplier messageSupplier) public static void assertTimeout(Duration timeout, ThrowingSupplier supplier, String message) public static void assertTimeout(Duration timeout, ThrowingSupplier supplier, Supplier messageSupplier)
Примеры
@Test void testCase() < //This will pass Assertions.assertTimeout(Duration.ofMinutes(1), () ->< return "result"; >); //This will fail Assertions.assertTimeout(Duration.ofMillis(100), () -> < Thread.sleep(200); return "result"; >); //This will fail Assertions.assertTimeoutPreemptively(Duration.ofMillis(100), () -> < Thread.sleep(200); return "result"; >); >
8. assertTrue() и assertFalse()
Метод assertTrue() утверждает, что предоставленное условие истинно или предоставленное логическое условие BooleanSupplier истинно.
Точно так же assertFalse() утверждает, что предоставленное условие ложно.
У обоих есть следующие перегруженные методы:
Перегруженные методы
public static void assertTrue(boolean condition) public static void assertTrue(boolean condition, String message) public static void assertTrue(boolean condition, Supplier messageSupplier) public static void assertTrue(BooleanSupplier booleanSupplier) public static void assertTrue(BooleanSupplier booleanSupplier, String message) public static void assertTrue(BooleanSupplier booleanSupplier, Supplier messageSupplier) public static void assertFalse(boolean condition) public static void assertFalse(boolean condition, String message) public static void assertFalse(boolean condition, Supplier messageSupplier) public static void assertFalse(BooleanSupplier booleanSupplier) public static void assertFalse(BooleanSupplier booleanSupplier, String message) public static void assertFalse(BooleanSupplier booleanSupplier, Supplier messageSupplier)
Примеры
@Test void testCase() < boolean trueBool = true; boolean falseBool = false; Assertions.assertTrue(trueBool); Assertions.assertTrue(falseBool, "test execution message"); Assertions.assertTrue(falseBool, AppTest::message); Assertions.assertTrue(AppTest::getResult, AppTest::message); Assertions.assertFalse(falseBool); Assertions.assertFalse(trueBool, "test execution message"); Assertions.assertFalse(trueBool, AppTest::message); Assertions.assertFalse(AppTest::getResult, AppTest::message); >private static String message () < return "Test execution result"; >private static boolean getResult ()
9. assertThrows()
assetThrows() утверждает, что исполнение подаваемы Executable генерирует исключение из expectedType и возвращает исключение.
Перегруженные методы
public static T assertThrows(Class expectedType, Executable executable)
Примеры
@Test void testCase() < Throwable exception = Assertions.assertThrows(IllegalArgumentException.class, () ->< throw new IllegalArgumentException("error message"); >); >
10. Пример fail()
Метод fail() делает тест неуспешным. Он имеет следующие перегруженные методы:
Перегруженные методы
public static void fail(String message) public static void fail(Throwable cause) public static void fail(String message, Throwable cause) public static void fail(Supplier messageSupplier)
Примеры
public class AppTest < @Test void testCase() < Assertions.fail("not found good reason to pass"); Assertions.fail(AppTest::message); >private static String message () < return "not found good reason to pass"; >>
Какие существуют инструменты для автоматического тестирования Java кода
Изучите основные инструменты автоматического тестирования кода на Java, включая JUnit, TestNG, Mockito и JaCoCo, чтобы улучшить качество вашего кода.
Алексей Кодов
Автор статьи
9 июня 2023 в 16:31
Автоматическое тестирование кода является важной частью процесса разработки программного обеспечения, особенно при использовании Java. В этой статье мы рассмотрим несколько популярных инструментов для автоматического тестирования Java кода, которые помогут обеспечить качество и надежность вашего кода.
JUnit
JUnit — это один из самых известных и широко используемых фреймворков для автоматического тестирования кода на языке Java. Он предоставляет набор аннотаций и утверждений (assertions) для написания тестов, а также интегрируется с большинством сред разработки (IDE) и систем сборки.
Пример использования JUnit:
import org.junit.Test; import static org.junit.Assert.assertEquals; public class MyTests < @Test public void testSum() < int a = 2; int b = 3; int expected = 5; assertEquals(expected, a + b); >>
TestNG
TestNG — это еще один популярный фреймворк для автоматического тестирования Java кода. Он предоставляет более широкий функционал по сравнению с JUnit, включая поддержку параллельного выполнения тестов, гибкую конфигурацию тестов и возможность использования аннотаций для определения зависимостей между тестами.
Пример использования TestNG:
import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; public class MyTests < @Test public void testSum() < int a = 2; int b = 3; int expected = 5; assertEquals(expected, a + b); >>
Java-разработчик: новая работа через 11 месяцев
Получится, даже если у вас нет опыта в IT
Mockito
Mockito — это библиотека для создания мок-объектов (mock objects) при тестировании Java кода. Она позволяет имитировать поведение объектов, с которыми взаимодействует ваш код, что упрощает написание тестов для сложных систем.
Пример использования Mockito:
import org.junit.Test; import static org.mockito.Mockito.*; public class MyTests < @Test public void testMock() < // Создаем мок-объект List mockedList = mock(List.class); // Используем мок-объект mockedList.add("one"); mockedList.clear(); // Проверяем вызовы методов verify(mockedList).add("one"); verify(mockedList).clear(); >>
JaCoCo
JaCoCo — это инструмент для измерения покрытия кода тестами в Java проектах. Он генерирует отчеты о покрытии кода, которые позволяют оценить эффективность тестов и выявить участки кода, которые требуют дополнительного тестирования.
Пример использования JaCoCo:
<!-- В файле pom.xml вашего проекта добавьте следующий плагин --> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.7</version> <executions> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin>
Это лишь некоторые из доступных инструментов для автоматического тестирования Java кода. Используйте их в своих проектах, чтобы повысить качество и надежность вашего кода.
