Почему мой метод @BeforeClass не работает?
У меня есть следующий код:
@BeforeClass
public static void setUpOnce() throws InterruptedException {
fail("LOL");
}
И различные другие методы, которые являются либо методами @Before, @After, @Test, либо @AfterClass.
Тест не прерывается при запуске, как кажется. Может кто-нибудь мне помочь?
У меня есть JUnit 4.5
Метод не работает при непосредственном вызове setUp(), который аннотируется как @раньше.
Класс def:
public class myTests extends TestCase {
Ответы
Ответ 1
НЕ продлить TestCase и использовать аннотации в одно и то же время!
Если вам нужно создать тестовый набор с аннотациями, используйте аннотацию RunWith, например:
@RunWith(Suite.class)
@Suite.SuiteClasses({ MyTests.class, OtherTest.class })
public class AllTests {
// empty
}
public class MyTests { // no extends here
@BeforeClass
public static void setUpOnce() throws InterruptedException {
...
@Test
...
(по соглашению: имена классов с заглавной буквой)
Ответ 2
метод должен быть статическим, а не напрямую вызывать fail (иначе другие методы не будут выполняться).
Следующий класс показывает все стандартные типы методов JUnit 4:
public class Sample {
@BeforeClass
public static void beforeClass() {
System.out.println("@BeforeClass");
}
@Before
public void before() {
System.out.println("@Before");
}
@Test
public void test() {
System.out.println("@Test");
}
@After
public void after() {
System.out.println("@After");
}
@AfterClass
public static void afterClass() {
System.out.println("@AfterClass");
}
}
и вывод (не удивительно):
@BeforeClass
@Before
@Test
@After
@AfterClass
Ответ 3
Убедитесь, что:
- Тестовый класс не наследуется от TestCase
- Метод @BeforeClass статичен
- У вас не более одного метода @BeforeClass в иерархии тестовых классов (будет выполнен только самый специализированный метод @BeforeClass)
Ответ 4
Для того, чтобы выполнявшая перед аннотированная функция выполнялась, мне пришлось сделать следующее:
Если вы используете Maven, добавьте зависимость к Junit 4.11 +:
<properties>
<version.java>1.7</version.java>
<version.log4j>1.2.13</version.log4j>
<version.mockito>1.9.0</version.mockito>
<version.power-mockito>1.4.12</version.power-mockito>
<version.junit>4.11</version.junit>
<version.power-mockito>1.4.12</version.power-mockito>
</properties>
и зависимость:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${version.junit}</version>
<scope>test</scope>
</dependency>
.
.
.
</dependencies>
Убедитесь, что класс Junit Test не расширяет класс TestCase, так как это приведет к перекрытию со старой версией:
public class TuxedoExceptionMapperTest{
protected TuxedoExceptionMapper subject;
@Before
public void before() throws Exception {
subject = TuxedoExceptionMapper.getInstance();
System.out.println("Start");
MockitoAnnotations.initMocks(this);
}
}