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'
và 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à
Gradle project running jUnit 5 tests in IntelliJ
Nhưng như bạn có thể thấy điều này là cho các phiên bản cũ hơn của IntelliJ, và tôi đã sử dụng cú pháp cho IJ 2016.3.3 và cao hơn theo một trong các câu trả lời, trong một dòng phụ thuộc JUnit, do đó sẽ không sao.
Upgrade from JUnit 4 to JUnit 5 in intellij with gradle
Liên kết trở lại câu hỏi trên, và các liên kết đến Jetbrains blog này trong đó sử dụng cùng một dòng như câu hỏi trên.Cũng liên kết tới:
Integrate JUnit 5 tests results with Intellij test report này một chương trình, trong câu hỏi, như sự phụ thuộc cũng
testRuntime("org.junit.vintage:junit-vintage-engine:5.0.0-M1")
đó được giải thích trong Why were JUnit Jupiter and JUnit Vintage separated When I Running TestCase in IntelliJ? Vâng, khi tôi chạy nó, kết quả cho thấy nó không thể tìm thấy phiên bản này nhưng theo Maven Repository này là dành cho JUnit 5:
testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4")
những câu trả lời có lưu ý rằng bạn chỉ có thể chạy thử nghiệm trong vòng IntelliJ kể từ khi l Phiên bản ater có hỗ trợ JUnit 5. Tôi biết, và thử nghiệm chạy tốt khi tôi chạy từ bên trong IntelliJ. Nhưng tôi muốn sử dụng Gradle (và Travis, cần quản lý sự phụ thuộc).
How to capture stdout/stderr in junit 5 gradle test report?
tôi đã cố gắng sử dụng
testCompile("org.junit.platform:junit-platform-gradle-plugin:1.0.0-M3") testCompile("org.junit.jupiter:junit-jupiter-engine:5.0.0-M3")
nhưng kết quả không thay đổi.
Dự án mẫu của tôi nằm trên https://github.com/PHPirates/java-template-project nhưng câu hỏi này phải chứa tất cả thông tin cần thiết.
Đã 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