2013-02-25 59 views
0

我想使用在拆卸方法豆在彈簧單元測試(基於SpringJUnit4ClassRunner)。 但這種方法(即標註有@AfterClass)應該是靜態的。什麼是解決方案?@AfterClass在基於SpringJUnit4ClassRunner(如何在拆卸使用豆)

例如:

@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 
} 

} 

回答

2

也許你想改用@AfterClass的@After。它不是一成不變的。

1

JUnit使用每個測試方法的新實例,所以在@AfterClass執行測試實例不存在,你不能訪問任何成員。

如果你真的需要它,你可以一個靜態成員添加到測試類應用程序上下文並使用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); 
    } 
}