Ответ теперь заключается в создании @ClassRule
в вашем номере. Правило будет вызываться до или после (в зависимости от того, как вы его реализуете) запускается каждый тестовый класс. Существует несколько различных базовых классов, которые вы можете расширить/реализовать. Что приятно в правилах классов, так это то, что если вы не реализуете их как анонимные классы, вы можете повторно использовать код!
Вот статья о них: http://java.dzone.com/articles/junit-49-class-and-suite-level-rules
Вот некоторые примеры кода, чтобы проиллюстрировать их использование. Да, это тривиально, но это должно хорошо иллюстрировать жизненный цикл, чтобы вы начали.
Первое определение свита:
import org.junit.*;
import org.junit.rules.ExternalResource;
import org.junit.runners.Suite;
import org.junit.runner.RunWith;
@RunWith(Suite.class)
@Suite.SuiteClasses({
RuleTest.class,
})
public class RuleSuite{
private static int bCount = 0;
private static int aCount = 0;
@ClassRule
public static ExternalResource testRule = new ExternalResource(){
@Override
protected void before() throws Throwable{
System.err.println("before test class: " + ++bCount);
sss = "asdf";
};
@Override
protected void after(){
System.err.println("after test class: " + ++aCount);
};
};
public static String sss;
}
А теперь определение тестового класса:
import static org.junit.Assert.*;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExternalResource;
public class RuleTest {
@Test
public void asdf1(){
assertNotNull("A value should've been set by a rule.", RuleSuite.sss);
}
@Test
public void asdf2(){
assertEquals("This value should be set by the rule.", "asdf", RuleSuite.sss);
}
}
Почему BeforeSuite и AfterSuite не работает? – guerda 2008-12-09 06:59:06