2010-08-20 2 views
1

Я создаю пользовательский тестовый бегун для тестовых примеров JUnit, используя run(junit.framework.Test test) JUnitCore и проходящий в ClassName.suite(). Мои тесты выполняются, однако возвращенные результаты: null. Кажется, что объекты не инициализируются в методе setUp(), потому что setUp(), по-видимому, никогда не называется так, как должно, даже с аннотацией @Before. Тесты успешны, если я создаю экземпляр каждого объекта, который требуется в каждом методе тестирования. Этот подход, однако, утомительно и поражает цель проведения тестового класса. Это нормальное поведение? Есть ли лучшие тестовые ролики для JUnit, которые отражают то же поведение, что и тестовый бегун в Eclipse? Благодарю.Метод JUnitCore run() не является неявным вызовом setUp() перед каждым тестом

Вот код для бегуна:

public class TestRunner 
{ 
    Result res = new Result(); 
    String results = new String(); 
    JUnitCore runner = new JUnitCore(); 

    protected TestRunner() 
    { 
    } 

    public String runReport(Test input) 
    { 
     System.out.println(input.toString()); 
     res = runner.run(input); 
     String testClass = "Class: "; 
     String testFailCt = "Failure Count: "; 
     String testFalures = "Failures: "; 
     String testRunCt = "Runs: "; 
     String testRunTm = "Run Time: "; 
     String testSuccess = "Success: "; 
     String newln = "\n"; 
     results += testClass + input.getClass() + newln; 
     results += testFailCt + res.getFailureCount() + newln; 
     results += testFalures + newln; 
     List<Failure> failures = res.getFailures(); 
     int i = 0; 
     for (Failure x: failures) 
     { 
      i++; 
      results += i +": " + x + newln; 
     } 
     results += testRunCt + res.getRunCount() + newln; 
     results += testRunTm + res.getRunTime() + newln; 
     results += testSuccess + res.wasSuccessful() + newln; 
     return results; 
    } 
} 

Вот как метод runReport() вызывается из другого класса:

runner.runReport(TestClassName.suite()); 

То, что я должен пройти в run() так что setUp() будет неявно вызываемые перед каждым тестом? Я знаю, что прохождение в сюите не сделает этого. Поэтому я просто изменил свои тестовые примеры, чтобы в каждом тесте были созданы все необходимые объекты.

+0

Вы могли бы показать код? Легче понять, что вы имеете в виду, или увидеть опечатки, которые иногда являются причиной проблемы. –

ответ

2

... setUp(), по-видимому, никогда не называется так, как должно, даже с аннотацией @Before.

JUnit версия 4 поддерживает аннотацию - Я думаю, что junit.framework указывает на то, что вы используете версию 3. Если вы работаете JUnit 4 тестов с использованием TestRunner JUnit 3, вы можете найти эти интересные статьи:

JUnit Test Runner that creates tests just before running them

JUnit FAQ - см. «Письменные тесты» параграф. 3.

An early look at JUnit 4

Успехов!