Има ли начин да принудите Maven Surefire или JUnit да посочват името на неуспешния тестов клас, когато се изпълнява от тестов пакет?

Моят въпрос: Има ли начин да накарате Maven Surefire (или JUnit?) да посочи името на неуспешния тестов клас, когато този клас е бил изпълнен от тестов пакет?

Сега, дългата история.

Представете си, че имате 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 използвате? Въз основа на моя опит трябва да има допълнителни файлове в папката със сигурни доклади...   -  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