我在集成测试中使用Cucuming-jvm,并且在所有方案完成后仅执行一次就需要执行一些代码.
在仔细阅读了this之类的帖子并查看了该报告的issue之后,我完成了以下操作:
public class ContextSteps {
private static boolean initialized = false;
@cucumber.api.java.Before
public void setUp() throws Exception {
if (!initialized) {
// Init context. Run just once before first scenario starts
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
// End context. Run just once after all scenarios are finished
}
});
initialized = true;
}
}
}
我认为以这种方式进行的上下文初始化(相当于BeforeAll)很好.但是,尽管它可以正常工作,但是我不确定使用Runtime.getRuntime().addShutdownHook()进行AfterAll模拟是否是一个好习惯.
所以,这些是我的问题:
>是否应该避免Runtime.getRuntime().addShutdownHook()来实现AfterAll?
>还有其他更好的选择来模拟黄瓜jvm中的AfterAll行为吗?
先谢谢您的帮助.
解决方法:
也许更好的方法是使用诸如Ant,Maven或Gradle之类的构建工具来进行设置和拆卸操作,这是集成测试的一部分.
使用Maven Fail Safe Plug-in时,用于设置集成测试.有阶段预集成测试,通常用于设置数据库和启动Web容器.然后运行集成测试(阶段集成测试).然后进行阶段集成后测试,以关闭和关闭/移除/清理物品.
信息如果通过JUnit运行Cucumber测试,则可能还需要考虑以下内容
如果它是更简单,更小的设置,则可以查看JUnit @BeforeClass和@AfterClass.或实现一个JUnit @ClassRule,它具有自己的before()和after()方法.
@ClassRule
public static ExternalResource resource = new ExternalResource() {
@Override
protected void before() throws Throwable {
myServer.connect();
}
@Override
protected void after() {
myServer.disconnect();
}
};