Я пытаюсь использовать JUnit 5 с Gradle после того, как мне удалось запустить тест JUnit 4.
Ожидаемый результат: Tthe JUnit 4 test дал хороший "пройденный" в выводе и html-отчет в build/reports/tests
.
Фактический результат: Тест JUnit 5, как показано ниже, не выводит ничего, кроме (...) build succesful
, но я знаю, что тест на самом деле не выполняется, так как нет выходного файла теста, пропускаемого/пропущенного/неудачного, и fail
в тест сохраняет сборку успешной.
Выполнение gradle test --info
дает Skipping task ':testClasses' as it has no actions.
среди многих я думаю, что в большинстве случаев не имеет значения. Удивительно, но это также говорит о Executing task ':test'
и " Generating HTML test report... Finished generating test html results
и аналогичные для xml в build/test-results/test
, в то время как xml не генерируется, html не показывает тестов запуск и отсутствие ошибок, и тест действительно не выполняется.
То, что я также считаю очень интересным, заключается в том, что gradle test --debug
дает
[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
в то время как мой единственный тест содержит
fail("test fails");
который, я думаю, очень странный!
Мой файл сборки
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"
}
}
Мой тест
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");
}
}
Моя структура папок, используя пакет mypackage
,
java-template-project
--- src
--- mypackage
--- HelloWorld.java
--- test
--- mypackage
--- HelloWorldTest.java
и в IntelliJ 2017.1.3, который я использую, структура модуля выглядит так:
java-template-project
--- java-template-project_main
--- src/mypackage
--- HelloWorld(.java)
--- java-template-project_test
--- test/mypackage
--- HelloWorldTest(.java)
потому что Gradle в настоящее время хочет источник и тесты в своем собственном пакете.
Что я пробовал
Очевидно, что это не первый вопрос по этой теме, все соответствующие вопросы, которые я нашел,
-
Проект Gradle, выполняющий jUnit 5 тестов в IntelliJ
Но, как вы видите, это относится к более старым версиям IntelliJ, и я уже использую синтаксис для IJ 2016.3.3 и выше в соответствии с одним из ответов в одной строке зависимости JUnit, так что это должно быть хорошо.
-
Обновление с JUnit 4 до JUnit 5 в intellij с помощью gradle
Ссылки на предыдущий вопрос и ссылки на этот блог Jetbrains, который использует ту же строку, что и выше. Также ссылки на:
-
Интеграция результатов теста JUnit 5 с протоколом испытаний Intellij. В этом вопросе указывается, что зависимость также
testRuntime("org.junit.vintage:junit-vintage-engine:5.0.0-M1")
что объясняется в: Почему JUnit Jupiter и JUnit Vintage были отделены, когда я запускал TestCase в IntelliJ? Ну, когда я запустил его, результат показал, что он не может найти эту версию, но в соответствии с репозиторием Maven это для JUnit 5:
testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4")
В ответах там отмечается, что вы можете просто запускать тесты внутри IntelliJ, поскольку более поздние версии поддерживают JUnit 5. Я знаю, и тест отлично работает, когда я убегаю из IntelliJ. Но я хочу использовать Gradle (и Travis, который нуждается в управлении зависимостями).
-
Как захватить stdout/stderr в отчете о тестировании юнита 5?
Я попытался использовать
testCompile("org.junit.platform:junit-platform-gradle-plugin:1.0.0-M3") testCompile("org.junit.jupiter:junit-jupiter-engine:5.0.0-M3")
но результаты не изменились.
Мой шаблонный проект находится на https://github.com/PHPirates/java-template-project, но этот вопрос должен содержать всю необходимую информацию.