web-dev-qa-db-ja.com

@BeforeClassメソッドが実行されないのはなぜですか?

私は次のコードを持っています:

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

また、@ Before、@ After、@ Test、または@AfterClassメソッドのいずれかである他のさまざまなメソッド。

起動時にテストが失敗することはないようです。誰かが私を助けてくれますか?

私はJUnit 4.5を持っています

@beforeと注釈が付けられたsetUp()への即時呼び出しでメソッドが失敗します。クラス定義は:

public class myTests extends TestCase {
43
Lynden Shields

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
    ...

(慣例:大文字のクラス名)

64
user85421

メソッド 静的である必要があります であり、直接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
16
Vladimir

確認してください:

  • テストクラスはTestCaseを継承しません
  • @BeforeClassメソッドは静的です
  • テストクラス階層に複数の@BeforeClassメソッドがない(最も特殊な@BeforeClassメソッドのみが実行されます)
2
ben75

以前に注釈が付けられた関数が実行されるようにするために、私は次のことを行わなければなりませんでした: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);
   }
}
0
shacharsol