2012-04-19 1 views
4

Использование JUnit 4, мой скрипт сборки ant, который вызывает junit с задачей, всегда сообщает имена классов тестов как «неизвестные». Есть ли способ исправить это, что не связано с получением TestCase?JUnit 4 @Test аннотации отчеты имя теста как «неизвестно»

Я объявляю мои методы испытаний с аннотацией @Test, например:

SomeTest.java:

public class SomeTest { 
    @Test 
    public void doSomething() { .. } 
} 

и собрать их вместе в TestSuite:

AllTests.java:

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
    SomeTest.class 
}) 
public class AllTests { 
} 

Затем я вызываю задачу муравья через NetBeans, у которой есть хороший интегрированный supp ort для печати результатов запуска JUnit. Все, кажется, найти, кроме названия теста всегда «неизвестно», например:

6 tests passed, 2 tests failed, 2 tests caused an error (8.4s) 
com.mystuff.AllTests FAILED 
    Unknown passed (0.0s) 
    Unknown passed (0.0s) 
    Unknown passed (0.0s) 
    Unknown passed (0.0s) 
    Unknown passed (0.0s) 
    Unknown passed (0.0s) 
    Unknown FAILED (0.0s) 
    Unknown caused an ERROR: at org.hibernate.somethingorother.java:1234 (0.0s) 
    ..etc.. 

тесты работают правильно, и я обычно могу понять точку отказа от трассировки стека, который вошедшего, но все помечены как " Неизвестный "просто раздражает и тупо.

Прочитав несколько сообщений SO, я обнаружил, что есть два способа установить тесты, старый путь JUnit 3, полученный от TestCase, и новый метод Junit 4 для использования аннотаций @Test.

Not able to execute tests with @Test annotation when my test extends TestCase(Junit) in Eclipse

JUnit confusion: use 'extends TestCase' or '@Test'?

И этот пост упоминает «В JUnit 4 тестовые классы больше не распространяются общие рамки класса. Так что не унаследованный метод не GetName больше» How to obtain test case name in JUnit 4 at runtime?

Я попытался расширив мой тестовый пример от TestCase, и это сделало сообщение об этом правильном, но это единственное изменение вызвало некоторые из его жизненных циклов, и тесты не сработали безуспешно. Я понимаю, что когда бегун JUnit видит, что ваш класс тестов получен из TestCase, он запускает его как тестовый пример JUnit 3 и поэтому игнорирует все мои @Before, @After и т. Д. Аннотации. Я не вижу смысла отступать в тестовые механизмы JUnit 3.

ответ

7

Ну, это неловко, но это заслуживает того, чтобы его сказали. Кажется, я просто ответил на свой вопрос.

Ответ, кажется, одна из задач атрибутов, enableTestListenerEvents, описанные здесь: http://ant.apache.org/manual/Tasks/junit.html

Я проигнорировал его, потому что документы говорят «, так как Ant 1.8.2 - Ant 1.7.0 до 1.8.1 ведут себя как если этот атрибут был истинным по умолчанию ». и я запускаю 1.8.2, но я неправильно понял, это на самом деле говорит, что в 1.8.2 он отключен по умолчанию.

Так что исправление изменить свою задачу в build.xml:

<junit haltonfailure="true" printsummary="on" fork="yes" dir="."> 

к

<junit haltonfailure="true" printsummary="on" fork="yes" dir="." 
    enableTestListenerEvents="true"> 

NetBeans печатает вверх к-момент информации в области Результаты тестов, в том числе имена тестов, по мере прохождения тестов. Весь опыт обратной связи намного богаче.Сообщите своим друзьям :)

Смежные вопросы