JUnit5ãæ¡å¤ããããªã®ã§ãJUnit5ã使ãã¨ã©ããªæãã§ãã¹ããå¤ããã®ãèãã¦ã¿ã¾ãã
å®éã«ã©ããå¤ãã£ããã¨ããä½¿ãæ¹èªä½ã¯ããããã¾ã¨ããããããã°ãããããå
¬å¼ããã¥ã¡ã³ããèªã¿ãããã®ã§ãã¡ããã
http://junit.org/junit5/docs/current/user-guide/
ã¡ã½ãããã¨ã®ãã¹ã
JUnit5ã§ããã®ã¯ãNestedã§ããã
ãã¾ã¾ã§ãããããªã¡ã½ããã対象ã«ãããã¹ããå
¥ãæ··ãã£ã¦ãã¨æãã¾ãã
import org.junit.Before; import org.junit.Test; public class PurchaseTest { @Before public void setup() { // å ¨ä½ã®ã»ããã¢ãã // purchase()ç¨ã®ã»ããã¢ãã // history()ç¨ã®ã»ããã¢ãã } @Test public void purchase_success() { } @Test public void purchase_insufficient() { } @Test public void purchase_soldout(){ } @Test public void history() { } @Test public void history_nodata() { } }
ãããªæããhoge_case1ã¿ãããªã®ããããã並ãã§ããããã«ããã£ãã
åã¡ã½ããç¨ã®ã»ããã¢ããããå
¨é¨ã¾ã¨ããããã»ããã¢ããç¨ã¡ã½ãããå®ç¾©ãã¦å¼ã³åºãããã¿ããã«ãªã£ã¦ãã¾ããã
ãããNested使ãã¨ãããã
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; public class PurchaseTest { @BeforeEach void setup() { // å ¨ä½ã®ã»ããã¢ãã } @Nested class purchase { @BeforeEach void setup() { // purchase()ç¨ã®ã»ããã¢ãã } @Test void success() { } @Test @DisplayName("éé¡ä¸è¶³") void insufficient() { } @Test void soldout(){ } } @Nested class history { @BeforeEach void setup() { // history()ç¨ã®ã»ããã¢ãã } @Test void normal() { } @Test void nodata() { } } }
publicæå®ãä¸è¦ã«ãªã£ãã®ããå°å³ã«ãããããã
ã¡ã½ãããã¨ã®ãã¹ããNestedããããã®ã¯ã©ã¹åã¯ãã¡ã½ããã«ãããã¦å°æåå§ã¾ãã«ããã®ãããããªã¨æããã©ãIDEã¨ãã«è¦åããããã§ãããã
ãã¹ãåºå
JUnit5ããcategoryã®ä»£ããã«tagãå°å
¥ããã¾ããããã¢ããã¼ã·ã§ã³ãçããªã£ãã¨ããã§ããã¡ãã¡ã¤ããã®ã¯é¢åã
ã¡ã¿ã¢ããã¼ã·ã§ã³ã使ããã®ã§ãããã便å©ã«ã
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Tag("integration") @Test public @interface MySqlIT { } @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Tag("integration") @Test public @interface SpringIT { }
ãããªæãã®ã¢ããã¼ã·ã§ã³ãå®ç¾©ãã¦ã
@MySqlIT void store() { // å¤é¨ã®MySQLã«ã¢ã¯ã»ã¹ãã¡ãããã¹ã } @SpringIT void login() { // ããã®Springãå¼ã³åºããããããã¹ã }
ã¿ãããªæãã§ãã¹ããæ¸ããã
ã§ããã«ãã¹ã¯ãªããã«ã¯ä¸æ¬ã§excludeã§ãããã
<configuration> <properties> <excludeTags>integration</excludeTags> </properties> </configuration>
ç´°ååããããã¨ä½¿ãã«ãããã ãã©ã
ãã©ã¡ã¿ã©ã¤ãºãã¹ã
ã¡ãã£ã¨ãã¤ãã©ã¡ã¼ã¿å¤ãããã¹ããæ¸ãã®ãé¢åã ã£ããã©ãã ãã¶æ¥½ã«ãªãã¾ãã
junit-jupiter-paramsãå¥ã«dependencyã«ä»ãå ããå¿
è¦ãããã®ã§æ³¨æã
@ParameterizedTest(name="param test {0}") @ValueSource(strings = {"one", "two"}) void paramTest(String param) { Assertions.assertEquals("one", param); }
å¤ã®çæã«ã¯ã@ValueSourceã®ã»ãã«ã@CsvSourceã¨ã@MethodSourceã¨ãããã®ã§ä¾¿å©ããã
pom
åèã¾ã§ã«ãããåãããpomã
ã¢ã¸ã¥ã¼ã«æ§æã¯ãããªæãã«ãªã£ã¦ã¾ãã
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>kis</groupId> <artifactId>junit5sample</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <junit.jupiter.version>5.0.1</junit.jupiter.version> <junit.platform.version>1.0.1</junit.platform.version> </properties> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>${junit.platform.version}</version> </dependency> </dependencies> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit.platform.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>${junit.jupiter.version}</version> <scope>test</scope> </dependency> </dependencies> </project>