Мой вопрос: есть ли способ заставить Maven Surefire (или JUnit?) Указывать имя тестового класса, который не прошел тест, когда этот класс был выполнен из набора тестов?
Теперь long story.
Представьте, что у вас есть набор тестов JUnit, который запускает два теста JUnit.
Примеры классов тестов:
public class TestOne {
@Test
public void foo() {
assertTrue(false);
}
@Test
public void bar() {
assertTrue(false);
}
}
@UnitTest
public class TestTwo {
@Test
public void foo() {
assertFalse(true);
}
}
и набор тестов:
@RunWith(Suite.class)
@SuiteClasses(value = { TestOne.class, TestTwo.class })
public class MySuite {
}
Теперь, если я запущу набор тестов (mvn test -Dtest=MySuite
), у меня будут следующие ошибки:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running caf.opm.preclosing.junit.MySuite
Tests run: 3, Failures: 3, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec <<< FAILURE!
Results :
Failed tests:
foo(my.project.junit.TestOne)
bar(my.project.junit.TestOne)
foo(my.project.junit.TestTwo)
Tests run: 3, Failures: 3, Errors: 0, Skipped: 0
Итак, читая эти строки, я легко могу определить, какиеклассы и тесты не выполняются.
Однако в каталоге target/surefire-reports/
у меня есть только один файл, MySuite.txt
, где три теста не пройдены.Одним из последствий такой ситуации является то, что моя сборка Hudson покажет мне следующую информацию:
All Failed Tests
Test Name Duration Age
>>> my.project.junit.MySuite.foo 0.0 1
>>> my.project.junit.MySuite.bar 0.0 1
>>> my.project.junit.MySuite.foo 0.0 1
Как видите, становится труднее идентифицировать провальные тесты, например, как TestOne.foo()
и TestTwo.foo()
не удалось, я увидел две MySuite.foo
ошибки в моем отчете JUnit.Конечно, я могу получить имя тестового класса, прочитав журналы неудачного теста, но это не совсем решение ...
Поэтому мой вопрос заключается в том, чтобы узнать, могу ли я принудительно использовать Surefire (или JUnit?), чтобы указать название тестового класса.
Спасибо.