我正在致力于修复其中一个项目中的集成测试。目前,所有集成测试类都扩展了 JerseyTest 类。正在经历泽西测试类 https://github.com/jersey/jersey/blob/master/test-framework/core/src/main/java/org/glassfish/jersey/test/JerseyTest.java#L601我意识到它使用 Junit 的 Before 和 After 注释为每个测试方法启动和停止容器。
为什么这是必要的?如果我们启动容器一次,运行测试并在结束时关闭它,这还不够吗?
我们还使用 Spring,并且上下文需要时间来初始化。
在 Junit4 之前,我们通过使用布尔标志手动处理来解决此限制。
@Before
public void setup() {
if(!containerStarted) {
// start
containerStarted = true;
}
// else do nothing
}
您可以使用@BeforeClass和@AfterClass来覆盖JerseyTest的@Before和@After生命周期。这是代码模板:
public abstract class MyJerseyTest {
private JerseyTest jerseyTest;
public MyJerseyTest(){
}
@BeforeClass
public void setUp() throws Exception {
initJerseyTest()
jerseyTest.setUp();
}
@AfterClass
public void tearDown() throws Exception {
jerseyTest.tearDown();
}
private void initJerseyTest() {
jerseyTest = new JerseyTest() {
@Override
protected Application configure() {
// do somthing like
enable(...);
set(...);
// create ResourceConfig instance
ResourceConfig rc = new ResourceConfig();
// do somthing like
rc.property(...);
rc.register(...);
return rc;
}
};
}
}
希望这有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)