0

春の単体テスト(SpringJUnit4ClassRunner)でティアダウン方式でbeanを使いたい。ただし、このメソッド (@AfterClass で注釈が付けられている) は静的である必要があります。解決策は何ですか?

例:

@RunWith(SpringJUnit4ClassRunner.class)
//.. bla bla other annotations
public class Test{

@Autowired
private SomeClass some;

@AfterClass
public void tearDown(){
    //i want to use "some" bean here, 
    //but @AfterClass requires that the function will be static
    some.doSomething();
}

@Test
public void test(){
    //test something
}

}
4

2 に答える 2

2

JUnit はテスト メソッドごとに新しいインスタンスを使用するため、@AfterClass実行時に Test インスタンスは存在せず、どのメンバーにもアクセスできません。

本当に必要な場合は、アプリケーション コンテキストを使用して静的メンバーをテスト クラスに追加し、TestExecutionListener

例えば:

public class ExposeContextTestExecutionListener  extends AbstractTestExecutionListener {

    @Override
    public void afterTestClass(TestContext testContext) throws Exception {
        Field field = testContext.getTestClass().getDeclaredField("applicationContext");
        ReflectionUtils.makeAccessible(field);
        field.set(null, testContext.getApplicationContext());
    }
}

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(listeners={ExposeContextTestExecutionListener.class})
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class ExposeApplicationContextTest  {

    private static ApplicationContext applicationContext;

    @AfterClass
    public static void tearDown() {
        Assert.assertNotNull(applicationContext);
    }
}
于 2013-02-25T19:57:33.110 に答える
2

おそらく、@AfterClass の代わりに @After を使用したいでしょう。静的ではありません。

于 2013-02-25T19:17:24.650 に答える