Features changed or added in JUnit5

Features changed or added in JUnit5

It’s been about 10 years since JUnit 4 was a major version upgrade.

We looked at the differences.

assumption

Language Version
Java 8 or higher

Class annotation changes

The @ExtendWith(SpringExtension.class) annotation is used to annotate the test class from JUnit5.

@ExtendWith(SpringExtension.class)
public class{
  public Some_kind_of_test() {
    // test
  }
}

@SpringJUnitConfig(classes = AppConfig.class) is the same as below.

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = AppConfig.class)

DI with TCF function

By adding the following annotation to the test class, it is possible to DI to classes that have dependencies.

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = AppConfig.class)

Place AppConfig.java somewhere in src/main/java.

The class name does not have to be AppConfig. Here it is named AppConfig.java.

AppConfig.java

package com.example.demo.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.example.demo.primary.repository")
public class AppConfig {}

No need for public modifier

@ExtendWith(SpringExtension.class)
public class AaaTest{
  public 何かのテスト() {
    // テスト
  }
}

In JUnit 4, the above was written as above, but both classes and methods no longer need the public modifier.

class AaaTest{
  何かのテスト() {
    // テスト
  }
}

Can be tested in parallel

You can run tests in parallel from JUnit5. This speeds up test execution dramatically. This is a very powerful feature.

Place the junit-platform.properties file in the classpath root, with the contents as follows

srt/test/resources/junit-platform.properties

junit.jupiter.execution.parallel.enabled=true # Enable Concurrency
junit.jupiter.execution.parallel.mode.default=concurrent # Simultaneous defaults (I don't think it's necessary)

Specifically, place junit-platform.properties under src/test/resources.

Specify test execution order with @TestMethodOrder annotation

Attach @TestMethodOrder(MethodOrderer.OrderAnnotation.class) to the class to specify the order in which each @Test is executed.

Attach @Order(org.junit.jupiter.api.Test) annotation to each test method.

Specify a numerical value for the argument and the tests will be executed in the specified order.

package jp.co.confrage;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@DataJpaTest
class LinkedserviceMansionServiceMstRepositoryTest {
  @BeforeAll
  static void initAll() {}

  @BeforeEach
  void beforeEach() {}

  @AfterEach
  void tearDown() {}

  @AfterAll
  static void tearDownAll() {}

  @Test
  @Order(1)
  @DisplayName("test case-1")
  void successTest() {
    // ~
  }

  @Test
  @Order(2)
  @DisplayName("test case-2")
  void failureTest() {
    // ~
  }
}

Annotations Obsolete in JUnit5

The following has been discontinued

Annotations Obsolete in JUnit5
@RunWith(Enclosed.class)
@RunWith(Theories.class)

Pretreatment / Post-treatment

We do pre/post processing before testing, but the annotations have changed from JUnit 4.

Processing Meaning mocha
@BeforeAll Static method to be executed only once before testing @Before
@BeforeEach Executed only once as the initial process for each test method @BeforeEach
@AfterAll Static method to be executed only once after the test @After
@AfterEach Executed only once as the termination process for each test method @AfterEach

Skip test

In JUnit 5, you can use the org.junit.jupiter.api.Disabled annotation to skip tests at the class level or at the method level.

Simply grant the @Disabled annotation.

コメント

タイトルとURLをコピーしました