2017-08-11 125 views
1

事情的心脏是我的IDE(的IntelliJ)内,我可以用鼠标右键点击一个个人.feature文件,并运行良好,但不读取Runner类中的任何参数。从命令行,它工作正常。 mvn clean compile test -Dcucumber.options="--tags @calculator"运行IDE内.feature文件不能读取黄瓜亚军类

我正在使用单个框架来处理多个Web应用程序。所以每个应用程序都在一个单独的子文件夹中。

+---test 
    +---java 
     +---com 
      +---company 
       +---app 
       ¦ +---app1 
       ¦ ¦ +---common 
       ¦ ¦ +---page 
       ¦ ¦ +---step 
       ¦ +---app2 
       ¦  +---common 
       ¦  +---page 
       ¦  +---step 
       +---core 

该框架将使用PageObject模式,使page将包含每个页面的详细信息,common将是在整个应用程序共同的特征,并step是给定的,当,然后步骤。

在资源文件夹中我有一个类似的布局

+---resources 
    +---com 
     +---company 
      +---app 
       +---app1 
       ¦ +---feature files go here 
       +---app2 
        +---feature files go here 

的亚军类是主要app文件夹。

package com.company.app; 

import com.company.core.Browser; 
import com.company.core._Start; 
import cucumber.api.CucumberOptions; 
import cucumber.api.SnippetType; 
import cucumber.api.junit.Cucumber; 
import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.runner.RunWith; 

import java.io.File; 
import java.net.InetAddress; 
import java.net.UnknownHostException; 

@RunWith(Cucumber.class) 
@CucumberOptions(
     plugin = {"pretty", 
       "html:target/cucumber", 
       "json:report/report.json", 
       "com.cucumber.listener.ExtentCucumberFormatter:" 
     }, 
     tags = {"[email protected]"}, 
     snippets = SnippetType.CAMELCASE 
) 
public class _RunnerTest extends _Start { 
    private static String reportFile = "report.html"; 
    private static String configFile = "extent-config.xml"; 

    @BeforeClass 
    public static void setup() { 
    // Stuff 
    } 

    @AfterClass 
    public static void teardown() { 
     // Stuff 
    } 
} 

因此,通过Maven命令行运行,一切都按预期工作。如果我在.feature文件(或与它的场景)的测试(S)将运行右键单击,但所以没有报告,以及@BeforeClass和@AfterClass被忽略不使用亚军类。

有什么我失踪了吗?

+0

在我结束试了一下。遇到同样的问题。但是想知道,@ BeforeClass和'@ AfterClass'是否在runner类或stepdefination类中? 另外请注意,因为我们是直接运行特征文件,没有与亚军类没有互动,所以代码将不会执行。 –

+0

@AshishDeshmukh,如图所示,'''@ BeforeClass'''和'''@ AfterClass'''是浇道的一部分。他们目前所包含的内容是报告电话。理想情况下,我想将浏览器启动并关闭。但是因为如果在IDE中运行跑步者没有被调用,那就没有意义了。 – MivaScott

+0

我认为要实现你所说的(将浏览器启动并关闭),我们可以为此创建单独的功能,并使用嵌套步骤来实现使用跑步者类的相同效果。 –

回答

2

当您直接运行特征文件,它不能运行使用的亚军。如果你想让你的测试使用runner中定义的@BeforeClass和@AfterClass,你必须运行runner。

另请注意,虽然Cucumber支持JUnits @ClassRule@BeforeClass@AfterClass注释,但不建议使用这些注释,因为它限制了不同跑步者之间的可移植性; 使用命令行或IDE时它们可能无法正确执行 相反,建议使用黄瓜BeforeAfter钩子。