首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@ SpringJUnit4ClassRunner中的AfterClass(如何在teardown中使用beans )

@ SpringJUnit4ClassRunner中的AfterClass(如何在teardown中使用beans )
EN

Stack Overflow用户
提问于 2013-02-26 03:13:16
回答 2查看 1.7K关注 0票数 0

我想在spring单元测试(SpringJUnit4ClassRunner)中使用拆卸方法中的bean。但是这个方法(用@AfterClass注解)应该是静态的。解决方案是什么?

示例:

代码语言:javascript
复制
@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
}

}
EN

回答 2

Stack Overflow用户

发布于 2013-02-26 03:17:25

也许你想使用@After而不是@AfterClass。它不是静态的。

票数 2
EN

Stack Overflow用户

发布于 2013-02-26 03:57:33

JUnit为每个测试方法使用一个新的实例,因此在@AfterClass执行中,测试实例不存在,并且您不能访问任何成员。

如果确实需要,可以使用应用程序上下文将静态成员添加到测试类中,并使用TestExecutionListener手动设置它

例如:

代码语言:javascript
复制
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);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15074602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档