ИЮНЬ 4 против ИЮНЯ 5

  • Последняя версия JUnit, JUnit5, использует возможности Java8, чтобы создать более читаемую, удобную и гибкую структуру.

Аннотации

  • @TestFactory : Указывает, что метод является динамическим тестом.
  • @Nested : Позволяет нам определять вложенные классы внутри тестового класса.
  • @ExtendWith : Он используется для добавления необязательного класса или пакета.

  • По умолчанию методы должны быть определены как статические как для JUnit 4, так и для JUnit 5, но в JUnit 5 аннотация @TestInstance(TestInstance.Lifecycle.PER_CLASS) используется для удаления требования использовать статические методы.

Утверждения

JUnit 4

  • В Junit 4 в org.junit.Assert есть все методы assert для проверки ожидаемых и достигнутых результатов.
public static void assertEquals(long expected, long actual)
public static void assertEquals(String message, long expected, long actual)
Войдите в полноэкранный режим Выход из полноэкранного режима
  • В качестве первого аргумента ожидается дополнительный параметр для сообщения об ошибке.

JUnit 5

  • В JUnit 5 org.junit.jupiter.Assertions включает большинство методов assert, в том числе новые методы assertThrows() и assertAll().
public static void assertEquals(long expected, long actual)
public static void assertEquals(long expected, long actual, String message)
public static void assertEquals(long expected, long actual, Supplier messageSupplier)
Войдите в полноэкранный режим Выход из полноэкранного режима
  • Дополнительный параметр для сообщения об ошибке ожидается в качестве последнего аргумента.

  • Поставщик messageSupplier позволяет динамически определить ответ в случае ошибки, используя ссылку на метод или лямбда-операцию.

  • В JUnit 4 при проверке того, что исключение было выброшено, мы использовали анотацию @test(expected = InterruptedException.class), тогда как в JUnit 5 мы можем проверить с помощью assertThrows следующим образом.

    @Test
    public void shouldThrowAnCheckedException(){
        Exception exception = Assertions.assertThrows(IOException.class, () -> {
            throw new IOException(
                       "We interrupt this test to throw an checked exception");
        });
     }
Войдите в полноэкранный режим Выход из полноэкранного режима
  • Аналогично, контроль таймаута был изменен на @test(timeout = 10), assertTimeout.
    @Test
    public void testFailWithTimeout() throws InterrptedException{
        Assertions.assertTimeout(Duration.ofMiilis, () -> Thread.sleep(100); 
    }   
Войдите в полноэкранный режим Выход из полноэкранного режима

Допущения

JUnit 4

  • В Junit 4, org.junit.Assume включает методы для указания предположений об условиях, при которых тест является значимым. К ним относятся ;
    • assumeFalse()
    • assumeNoException()
    • assumeNotNull()
    • assumeThat()
    • assumeTrue()
  • В качестве первого аргумента ожидается дополнительный параметр для сообщения об ошибке.

JUnit 5

  • В JUnit 5 количество этих предположений сократилось, и их стало 3. Кроме того, эти методы теперь включают org.junit.jupiter.api.Assumptions.

    • assumeFalse()
    • assumingThat()
    • assumeTrue()
  • Кроме того, методы могут быть перегружены, а желаемые операции могут быть заданы в качестве параметров в лямбда-форме.

@Test
void testSomething() throws Exception{
  Assumptions.assumingThat("foo".equals("bar"),() ->{
    assertEquals(...);
  })
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Набор тестов

  • Когда мы хотим вызывать и использовать различные тестовые классы из одного места, при использовании структуры, подобной приведенной ниже, с JUnit 4,
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({
        ExceptionTest.class, 
        TimeoutTest.class
})
public class JUnit4Example 
{
}
Войдите в полноэкранный режим Выход из полноэкранного режима
  • В JUnit 5 Suite заменен на SelectPackages и SelectClasses. Это полезно с точки зрения Единой ответственности. Также аннотация @RunWith заменена на @ExtendWith, а ее параметр изменен на JUnitPlatform.class.
import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.runner.RunWith;

@ExtendWith(JUnitPlatform.class)
@SelectPackages("com.howtodoinjava.junit5.examples")
public class JUnit5Example 
{
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Архитектура

  • В JUnit 4 все было в одном jar-файле, в JUnit 5 все по-другому.
  • JUnit 5 состоит из 3 подэлементов;
    • Платформа JUnit : Определяет API TestEngine для разработки новых тестовых сред, работающих на платформе.
    • JUnit Jupiter : Содержит аннотации JUnit и реализации TestEngine для запуска тестов, написанных с использованием этих аннотаций.
    • JUnit Vintage : Позволяет выполнять тесты, написанные на JUnit 3 и JUnit 4, на платформе JUnit 5.
  • JUnit 4 предназначен для Java5 или более поздней версии, а JUnit 5 — для Java8 или более поздней версии.

Интеграция с третьими сторонами

  • В JUnit 4 не было никакой поддержки стороннего программного обеспечения, и его пытались обеспечить с помощью Java Reflection.

  • JUnit 5 поддерживает работу любого фреймворка, использующего API TestEngine, с платформой JUnit, которую он содержит для этой цели.

Дополнительно

Параметризированные тесты

  • Хотя в JUnit 4 Parameterised Test поставлялся с различными библиотеками, в JUnit 5 он стал полностью встроенным.
@ParameterizedTest
@ValueSource(strings = {"foo", "bar"})
@NullAndEmptySource
void myParameterizedTest(String arg){
  underTest.performAction(arg);
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Выполнение условного теста

  • В JUnit 5 API ExecutionCondition позволяет условно включать и выключать тесты.
    • @EnabledOnOs и @DisabledOnOs: Включает проверку только на указанных операционных системах.
    • @EnabledOnJre и @DisabledOnJre: Указывает, должен ли тест быть включен или отключен для определенных версий Java.
    • @EnabledIfSystemProperty: Включает тест на основе значения системного свойства JVM.
    • @EnabledIf: Использует логику сценария для включения теста при выполнении заданных в сценарии условий.

Оцените статью
devanswers.ru
Добавить комментарий