Почему мой метод @BeforeClass не работает? - PullRequest
40 голосов
/ 09 апреля 2009

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

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

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

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

У меня есть JUnit 4.5

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

public class myTests extends TestCase {

Ответы [ 4 ]

64 голосов
/ 09 апреля 2009

НЕ расширяйте 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
    ...

(по договоренности: имена классов с заглавной буквой)

16 голосов
/ 09 апреля 2009

метод должен быть статическим и напрямую не вызывать сбой (в противном случае другие методы не будут выполнены).

В следующем классе показаны все стандартные типы методов 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
2 голосов
/ 01 апреля 2016

Убедитесь, что:

  • Ваш тестовый класс не наследуется от TestCase
  • Метод @BeforeClass является статическим
  • В иерархии тестовых классов нет более одного метода @BeforeClass (будет выполняться только самый специализированный метод @BeforeClass)
0 голосов
/ 30 марта 2015

Чтобы запустить аннотированную функцию, мне нужно было сделать следующее: Если вы используете 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);
   }
}
...