2018年4月24日 星期二

基本的 Annotation (JUnit5 一)

指南:官網中文

※Maven 設定

<properties>
    <junit.platform.version>5.1.1</junit.platform.version>
</properties>
    
<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${junit.platform.version}</version>
        <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit.platform.version}</version>
        <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-launcher</artifactId>
        <version>1.1.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

※尤於 JUnit5 只支援 java8 以上,所以 eclipse 要按專案右鍵內容,然後如下設定



※IntelliJ 預設會抓最高版本,想改的話,如下圖:


※gradle 設定

test {
    systemProperty 'junit.jupiter.conditions.deactivate', '*'
    systemProperties = [
        'junit.jupiter.extensions.autodetection.enabled': 'true',
        'junit.jupiter.testinstance.lifecycle.default': 'per_class'
    ]
}
    
dependencies {
    testCompile("org.junit.jupiter:junit-jupiter-api:5.1.1")
    testRuntime("org.junit.jupiter:junit-jupiter-engine:5.1.1")
}




※測試

@BeforeAll
public static void start1() {
    System.err.println("class之前執行1");
}
    
@BeforeAll
public static void start2() {
    System.err.println("class之前執行2");
}
    
@BeforeEach
public void begin1() {
    System.out.println("方法之前執行1");
}
    
@BeforeEach
public void begin2() {
    System.out.println("方法之前執行2");
}
    
@AfterEach
public void end1() {
    System.out.println("方法之後執行1");
}
    
@AfterEach
public void end2() {
    System.out.println("方法之後執行2\r\n");
}
    
@AfterAll
public static void theEnd1() {
    System.err.println("class之後執行1");
}
    
@AfterAll
public static void theEnd2() {
    System.err.println("class之後執行2");
}
    
@Test
public void bruceTest1() {
    System.out.println("測試1");
}
    
@Test
public void bruceTest2() {
    System.out.println("測試2");
}
    
@Disabled
@Test
public void bruceTest3() {
    System.out.println("測試3");
}

※結果:
class之前執行1
class之前執行2
方法之前執行1
方法之前執行2
測試1
方法之後執行1
方法之後執行2

方法之前執行1
方法之前執行2
測試2
方法之後執行1
方法之後執行2

class之後執行1
class之後執行2

※JUnit4 和 JUnit5 對應:
@Test--------------@Test
@Before-----------@BeforeEach
@After-------------@AfterEach
@BeforeClass-----@BeforeAll
@AfterClass-------@AfterAll
@Ignore------------@Disabled

※除了 @Disabled 外,其他的都沒有屬性了

※@BeforeAll 和 @AfterAll 印出來是紅色的

※一樣都是 public void xxx(),或者 public static void xxx() 才可以測試

※注意以上的 annotation 除了 @Disabled 沒有繼承關係外,其他 5 個都有

沒有留言:

張貼留言