Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在IDE中运行.feature文件不会读取cucumber runner类_Java_Maven_Intellij Idea_Cucumber Jvm - Fatal编程技术网

Java 在IDE中运行.feature文件不会读取cucumber runner类

Java 在IDE中运行.feature文件不会读取cucumber runner类,java,maven,intellij-idea,cucumber-jvm,Java,Maven,Intellij Idea,Cucumber Jvm,问题的核心是,在我的IDE(IntelliJ)中,我可以右键单击单个.feature文件,它运行良好,但不从Runner类读取任何参数。在命令行中,它可以正常工作。 mvn干净编译测试-Dcucumber.options=“--tags@calculator” 我使用一个框架来处理多个web应用程序。因此,每个应用程序都位于单独的子文件夹中 +---test +---java +---com +---company

问题的核心是,在我的IDE(IntelliJ)中,我可以右键单击单个.feature文件,它运行良好,但不从Runner类读取任何参数。在命令行中,它可以正常工作。
mvn干净编译测试-Dcucumber.options=“--tags@calculator”

我使用一个框架来处理多个web应用程序。因此,每个应用程序都位于单独的子文件夹中

+---test
     +---java
         +---com
             +---company
                +---app
                ¦   +---app1
                ¦   ¦   +---common
                ¦   ¦   +---page
                ¦   ¦   +---step
                ¦   +---app2
                ¦       +---common
                ¦       +---page
                ¦       +---step
                +---core
该框架将使用PageObject模型,因此
页面
将包含每个页面的详细信息,
通用
将用于整个应用程序的通用功能,
步骤
用于给定的、何时、然后是步骤

在resources文件夹中,我有一个类似的布局

+---resources
    +---com
        +---company
            +---app
                +---app1
                ¦   +---feature files go here
                +---app2
                    +---feature files go here
runner类位于主
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 = {"~@ignore"},
        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文件(或其场景),测试将运行,但不使用runner类,因此没有报告,@BeforeClass和@AfterClass将被忽略


有什么我遗漏的吗

当您直接运行要素文件时,它不会使用运行程序运行。如果希望测试使用在运行程序中定义的@BeforeClass和@AfterClass,则必须运行运行程序

还请注意,尽管Cucumber支持JUnits
@ClassRule
@BeforeClass
@AfterClass
注释,但不建议使用这些注释,因为它们限制了不同运行程序之间的可移植性; 使用命令行或IDE时,它们可能无法正确执行 相反,建议在
之后的钩子。

对于直接从IDE运行.feature文件,您应该在相同的路径中提供步骤定义。如果它们不在同一路径中,并且由包分隔,则必须使用Runner文件,在该文件中可以提供粘合代码和功能文件的路径。

在我的末尾尝试过。遇到同样的问题。但是我想知道,
@BeforeClass
@AfterClass
是在runner类还是StepDefinition类中?另外,请注意,由于我们直接运行功能文件,因此与runner类没有交互,因此代码不会执行。@AshishDeshmukh,如图所示,
@BeforeClass
@AfterClass
是runner的一部分。目前他们所包含的只是报告电话。理想情况下,我想把浏览器启动和关闭在那里了。但由于在IDE中运行时不会调用runner,这将是毫无意义的。我认为要实现您所说的(启动和关闭浏览器),我们可以为相同的功能创建单独的功能,并使用嵌套步骤来实现使用runner类的相同效果。