2017-06-08 22 views
15

Tôi đang cố gắng sử dụng JUnit 5 với Gradle sau khi tôi đã thành công trong việc chạy thử nghiệm JUnit 4.Làm thế nào để sử dụng JUnit 5 với Gradle?

Kết quả mong đợi: Kiểm tra JUnit 4 cho kết quả tốt đẹp 'được' trong đầu ra và báo cáo html trong build/reports/tests.

kết quả thực tế: Các thử nghiệm JUnit 5 như sau bất cứ điều gì không ra ngoài (...) build succesful, trong khi tôi biết được kiểm tra không thực sự chạy vì không có bản ghi kiểm tra đầu ra thông qua/bỏ qua/thất bại, và đặt một fail trong kiểm tra giúp xây dựng thành công.

Chạy gradle test --info sản lượng Skipping task ':testClasses' as it has no actions. trong số rất nhiều phần lớn tôi cho là đầu ra không liên quan. Đáng ngạc nhiên, nó cũng cho biết Executing task ':test'Generating HTML test report... Finished generating test html results và tương tự cho xml trong build/test-results/test, trong khi xml không được tạo, html cho thấy không có chạy thử nghiệm và không có lỗi, và thử nghiệm thực sự không chạy.

Những gì tôi cũng nghĩ rất thú vị, đó là gradle test --debug mang

[TestEventLogger] Gradle Test Run :test STARTED 
[org.gradle.api.internal.tasks.testing.junit.JUnitDetector] test-class- 
scan : failed to scan parent class java/lang/Object, could not find the class file 
[TestEventLogger] 
[TestEventLogger] Gradle Test Run :test PASSED 

trong khi thử nghiệm duy nhất của tôi chứa

fail("test fails"); 

mà tôi nghĩ là rất lạ!

xây dựng tập tin của tôi là

apply plugin: 'java' 

test { 
    dependsOn 'cleanTest' // run tests every time 

} 

sourceSets { 
    main { 
     java { 
      srcDirs 'src' 
     } 
    } 
    test { 
     java { 
      srcDirs 'test' 
     } 
    } 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 
    // when using this, it worked with a junit 4 test 
// testCompile 'junit:junit:4.10' 
    // this should be needed for junit 5 (using M4 is required since IJ 2017.1.2 
    testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M4") 
} 

test { 
    testLogging { 
     events "passed", "skipped", "failed" 
    } 
} 

thử nghiệm của tôi là

package mypackage; 

import org.junit.jupiter.api.Test; 
import static org.junit.jupiter.api.Assertions.assertEquals; 

public class HelloWorldTest { 
    @Test 
    public void testHelloWorld(){ 
     assertEquals(2, 1+1, "message"); 
    } 
} 

cấu trúc thư mục của tôi là, sử dụng gói mypackage,

java-template-project 
--- src 
    --- mypackage 
     --- HelloWorld.java 
--- test 
    --- mypackage 
     --- HelloWorldTest.java 

và trong IntelliJ 2017/01/03, mà tôi đang sử dụng, cấu trúc mô-đun trông như thế này

java-template-project 
--- java-template-project_main 
    --- src/mypackage 
     --- HelloWorld(.java) 
--- java-template-project_test 
    --- test/mypackage 
     --- HelloWorldTest(.java) 

vì Gradle ngày nay muốn nguồn và thử nghiệm trong gói của riêng họ.

Những gì tôi cố gắng

Rõ ràng đây không phải là câu hỏi đầu tiên về chủ đề này, tất cả các câu hỏi có liên quan tôi thấy là

+0

Đã có cùng một vấn đề. Phát hiện ra rằng @Test nên được nhập từ 'org.junit.jupiter.api' (Junit5 @Test) thay vì 'org.junit' (Junit4 @Test) – yname

Trả lời

13

Bạn cần động cơ cho cả hai phiên bản JUnit và bạn cần áp dụng plugin bổ sung nền tảng JUnit. Tôi không thấy rằng trong tập tin gradle của bạn. Đây là một bản xây dựng gradle đang hoạt động thực hiện cả JUnit 4 và 5:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath ("org.junit.platform:junit-platform-gradle-plugin:1.0.0-M4") 
    } 
} 

apply plugin: 'org.junit.platform.gradle.plugin' 
... 

dependencies { 
... 
    testCompile("junit:junit:4.12") 
    testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4") 

    testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M4") 
    testRuntime("org.junit.jupiter:junit-jupiter-engine:5.0.0-M4") 

    // Enable use of the JUnitPlatform Runner within the IDE 
    testCompile("org.junit.platform:junit-platform-runner:1.0.0-M4") 
} 

junitPlatform { 
    details 'tree' 
} 

xem thêm thông tin về điều đó.

2

Do github issue built-in hỗ trợ cho JUnit 5, dự kiến ​​Gradle 4,6

Như vậy kể từ gradle 4,6 kết quả mong đợi của bạn phải được giống như kết quả thực tế.

Dự kiến ​​kết quả: Tthe JUnit 4 thử nghiệm đã đưa ra một đẹp 'qua' trong đầu ra và báo cáo html trong build/reports/tests.

UPD:

gradle 4,6-rc-1 được phát hành vào ngày 16 tháng 2 năm 2018 và phiên bản này cung cấp được xây dựng trong hỗ trợ cho junit 5.

Để kích hoạt hỗ trợ junit 5 bạn cần cập nhật wrapper gradle:

gradle wrapper --gradle-version=4.6-rc-1 

và thêm chỉ một dòng vào build.gradle:

test { 
    useJUnitPlatform() 
} 
4

Mới: Hỗ trợ JUnit 5 ở Gradle 4.6

Như đã chỉ ra here từ Gradle 4.6-rc-1 trở đi JUnit 5 được hỗ trợ! Ghi chú phát hành chính thức là 4.6-rc-2 (hiện là mới nhất) here.Thiết lập cũ sẽ vẫn hoạt động, nhưng việc sử dụng này làm cho tệp xây dựng sạch hơn rất nhiều.

Cập nhật Gradle

Trước tiên, hãy chắc chắn rằng bạn đang sử dụng phiên bản mới nhất Gradle, kiểm tra phiên bản mới nhất here. Nếu đó là ví dụ 4.6-rc-2, hãy chạy trong một thiết bị đầu cuối tại vị trí dự án của bạn gradlew wrapper --gradle-version=4.6-rc-2 hoặc đảm bảo cập nhật dòng này trong tệp gradle/wrapper/gradle-wrapper.properties của bạn: distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-rc-2-all.zip.

Làm thế nào để sử dụng được xây dựng trong JUnit 5

Sau đó, với các file java, cấu trúc thư mục vv từ các câu hỏi tập tin build.gradle sẽ được (bằng cách sử dụng plugins khối mới)

plugins { 
    id 'java' 
} 

description = """ 
Gradle build file. 
This uses the gradle wrapper, so when running (the first time) use 'gradlew test' so then it 
downloads the right gradle automatically. 
""" 

repositories { 
    mavenCentral() 
    mavenLocal() 
} 

dependencies { 
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.3' 
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.0.3' 
} 

sourceSets { 
    main.java.srcDirs += 'src' 
    main.resources.srcDirs += 'src' 
    test.java.srcDirs += 'test' 
    test.resources.srcDirs += 'test' 
} 

// Java target version 
sourceCompatibility = 1.8 

test { 
    // Enable JUnit 5 (Gradle 4.6+). 
    useJUnitPlatform() 

    // Always run tests, even when nothing changed. 
    dependsOn 'cleanTest' 

    // Show test results. 
    testLogging { 
     events "passed", "skipped", "failed" 
    } 
} 
Các vấn đề liên quan