编程语言
首页 > 编程语言> > java-AfterAll全局钩子黄瓜-jvm

java-AfterAll全局钩子黄瓜-jvm

作者:互联网

我在集成测试中使用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();
  }
};

标签:cucumber-jvm,cucumber,bdd,java
来源: https://codeday.me/bug/20191120/2040378.html