У меня есть класс набора тестов:
@RunWith(Suite.class)
@Suite.SuiteClasses({
GameMasterTest.class,
PlayerTest.class,
})
public class BananaTestSuite {
Какую аннотацию я должен использовать для создания функции в этом классе выполненной перед каким-либо из классов, содержащих фактические тесты? Прямо сейчас я делаю это, и это работает, но это не столь читаемо, как это могло быть:
static {
try {
submitPeelAction = new Player(new GameMaster(1)).getClass().getDeclaredMethod("submitPeelAction");
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
submitPeelAction.setAccessible(true);
}
Я попробовал @BeforeClass
но это не работало.
Используйте @Before для setUp() и @After для методов blindDown.
EDIT: после некоторых тестов здесь я обнаружил, что @Before и @After не работает для Test Suite. В вашем случае для инкапсуляции кода инициализации следует использовать @BeforeClass и статический метод.
@RunWith(Suite.class)
@SuiteClasses( { ContactTest.class })
public class AllTests {
@BeforeClass
public static void init() {
System.out.println("Before all");
}
}
Прежде всего: если у вас последний JUnit, т.е. 4.7 или выше, вы также можете сделать это с помощью Правил. Для начала смотрите http://www.infoq.com/news/2009/07/junit-4.7-rules.
Насколько я понимаю, статический блок в классе Suite - хорошее решение.
Недостатком является то, что он будет вызываться только , когда вы прогоняете весь масть, а не отдельные тесты или тестовые классы. Таким образом, альтернативой будет вызов того же самого статического метода в suite-классе из методов @BeforeClass в всех ваших классах.
.Annotate a method with @BeforeClass to make it run before all tests run in this class. Аннотируйте метод с помощью @BeforeClass, чтобы он работал до @BeforeClass каждого теста в данном классе.
re. Ваши комментарии, @BeforeClass работает нормально. Вы выбрасываете исключение в этом методе ?
.