编程语言
首页 > 编程语言> > java-如何使用Maven和Cucumber为JUnit @Before挂钩定义不同的行为

java-如何使用Maven和Cucumber为JUnit @Before挂钩定义不同的行为

作者:互联网

我面临的挑战是,我有两种不同类型的测试,这些测试使用Cucumber BDD与Java,Maven和JUnit一起运行.

在与UI相关的几个功能中,我需要在每个场景之前执行一些操作,例如旋转VM,如下所示:

public class StepDefinitions {
    @Before
    protected void setUp(Scenario scenario) throws MalformedURLException {
        //Create browser resources here for all of my UI related scenarios
} 

但是,在非UI测试(例如API测试)中,我不需要启动那些浏览器.因此,对于@Before方法,我确实需要一个不同的行为,称为setUp.

我面临的挑战是,@ Before挂钩似乎适用于每个测试方法,即使这些方法位于不同的类中也是如此.结果,无论我尝试什么,都将始终创建浏览器资源,即使对于不需要浏览器的API测试也是如此.

这是我尝试未成功的尝试:

>我为API测试创建了一个完全独立的功能文件和StepDefinitions文件.定义文件没有对@Before方法的引用.但是,UI测试步骤定义中的@Before仍将针对API功能执行.这是我如何分离文件的示例(以前,即使图像显示在不同的程序包中,我也将它们放在完全相同的程序包中):https://screencast.com/t/ht5Jz4cLC

>我尝试为.api和.ui等测试类型创建新软件包.当我通过IntelliJ运行时,此方法有效,但是当我执行“ MVN测试”时,该方法不起作用.似乎没有找到或执行任何测试.该设置的外观如下:https://screencast.com/t/uSlB4sYTFm
>我试图在一种测试方法中设置一个静态属性,该方法将确定我是否具有API测试,然后根据该更新在setUp()中的实现.这当然不起作用,因为setUp()在知道它是UI或API测试的实际测试之前执行.

有没有一种方法可以自动更改setUp的行为,以使其执行/不执行基于测试类型(API / UI)的适当逻辑?

解决方法:

您可以使用标记的挂钩执行此操作:
“可以根据方案的标签有条件地选择要执行的挂钩.要仅针对某些方案运行特定的挂钩,可以将挂钩与标签表达式关联.”从docs开始.

标签:cucumber-jvm,maven,cucumber,java
来源: https://codeday.me/bug/20191024/1922972.html