Есть ли способ заставить Maven Surefire или JUnit указывать имя неудачного тестового класса при выполнении из Test Suite?

Мой вопрос: есть ли способ заставить Maven Surefire (или JUnit?) Указывать имя неудачного тестового класса, когда этот класс был выполнен из Test Suite?

А теперь длинная история.

Представьте, что у вас есть набор тестов 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?) Указать имя тестового класса.

Спасибо.


person Romain Linsolas    schedule 17.05.2011    source источник
comment
Вам нужно использовать собственный TestSuite - можно ли заставить Hudson / Maven просто выполнять все тесты? Поведение по умолчанию на этапе тестирования будет выполнять все тесты и сообщать о них, как и следовало ожидать.   -  person matt b    schedule 17.05.2011
comment
Какую версию плагина surefire вы используете? Исходя из моего опыта, в папке surefire-reports должны быть дополнительные файлы ...   -  person khmarbaise    schedule 17.05.2011
comment
Почему вы используете пакет? Почему бы не позволить компании surefire сделать работу ...   -  person khmarbaise    schedule 17.05.2011
comment
@matt b и @khmarbaise Если вы действительно хотите понять, почему мне нужно запускать suite, прочтите всю историю здесь: stackoverflow.com/questions/4970196/   -  person Romain Linsolas    schedule 18.05.2011
comment
Я только что попробовал с Surefire 2.8, но безуспешно ...   -  person Romain Linsolas    schedule 18.05.2011


Ответы (1)


Я получаю один файл на каждый тестовый класс, поэтому мне потребовалось время, чтобы понять это: вы используете набор тестов.

При использовании наборов тестов все результаты тестов сохраняются в одном файле с именем набора.

Нет возможности изменить это поведение. Попробуйте отправить запрос функции.

person Aaron Digulla    schedule 02.03.2012