Подтвердить что ты не робот

Почему мой метод @BeforeClass не работает?

У меня есть следующий код:

    @BeforeClass
    public static void setUpOnce() throws InterruptedException {
        fail("LOL");
    }

И различные другие методы, которые являются либо методами @Before, @After, @Test, либо @AfterClass.

Тест не прерывается при запуске, как кажется. Может кто-нибудь мне помочь?

У меня есть JUnit 4.5

Метод не работает при непосредственном вызове setUp(), который аннотируется как @раньше. Класс def:

public class myTests extends TestCase {
4b9b3361

Ответ 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);
   }
}