Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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 使用testNG Maven从info.cukes更改为io.cucumber。抛出运行时错误_Java_Maven_Selenium_Cucumber_Testng - Fatal编程技术网

Java 使用testNG Maven从info.cukes更改为io.cucumber。抛出运行时错误

Java 使用testNG Maven从info.cukes更改为io.cucumber。抛出运行时错误,java,maven,selenium,cucumber,testng,Java,Maven,Selenium,Cucumber,Testng,我有一个使用maven的testng框架。当我用testng运行Cumber测试时,我希望得到步骤描述。这是一个旧项目,因此我已将依赖项从info.cukes更改为io.cucumber的最新版本。然而,每当我运行runner测试文件时,它似乎都会抛出错误 java.lang.NoSuchMethodError: cucumber.runtime.RuntimeOptions.getPluginFormatterNames()Ljava/util/List; at cucumber.r

我有一个使用maven的testng框架。当我用testng运行Cumber测试时,我希望得到步骤描述。这是一个旧项目,因此我已将依赖项从info.cukes更改为io.cucumber的最新版本。然而,每当我运行runner测试文件时,它似乎都会抛出错误

java.lang.NoSuchMethodError: cucumber.runtime.RuntimeOptions.getPluginFormatterNames()Ljava/util/List;

    at cucumber.runtime.formatter.Plugins.createPlugins(Plugins.java:64)
    at cucumber.runtime.formatter.Plugins.<init>(Plugins.java:37)
    at cucumber.api.testng.TestNGCucumberRunner.<init>(TestNGCucumberRunner.java:56)
    at cucumber.api.testng.AbstractTestNGCucumberTests.setUpClass(AbstractTestNGCucumberTests.java:16)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:458)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:168)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
    at org.testng.TestRunner.privateRun(TestRunner.java:648)
    at org.testng.TestRunner.run(TestRunner.java:505)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    at org.testng.TestNG.runSuites(TestNG.java:1049)
    at org.testng.TestNG.run(TestNG.java:1017)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
java.lang.NoSuchMethodError:cucumber.runtime.RuntimeOptions.getPluginFormatterNames()Ljava/util/List;
在cucumber.runtime.formatter.Plugins.createPlugins(Plugins.java:64)中
在cucumber.runtime.formatter.Plugins.(Plugins.java:37)
位于cucumber.api.testng.TestNGCucumberRunner。(TestNGCucumberRunner.java:56)
位于cucumber.api.testng.AbstractTestNGCucumberTests.setUpClass(AbstractTestNGCucumberTests.java:16)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
位于org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
位于org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:458)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:222)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:142)
位于org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:168)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
位于org.testng.TestRunner.privateRun(TestRunner.java:648)
位于org.testng.TestRunner.run(TestRunner.java:505)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
在org.testng.SuiteRunner.runsequential上(SuiteRunner.java:450)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
运行(SuiteRunner.java:364)
位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
在org.testng.testng.runSuitesSequentially上(testng.java:1208)
位于org.testng.testng.runSuitesLocally(testng.java:1137)
位于org.testng.testng.runSuites(testng.java:1049)
位于org.testng.testng.run(testng.java:1017)
运行(IDEARemoteTestNG.java:72)
位于org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
我有以下maven依赖项,但不知道运行测试时是否缺少该依赖项?任何帮助都将不胜感激。当我搜索这个问题时,它似乎主要是通过拥有我所做的所有io.cumber文件的相同版本依赖关系来解决的

 <!-- https://mvnrepository.com/artifact/info.cukes/cucumber-junit -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

 <!-- https://mvnrepository.com/artifact/info.cukes/cucumber-java -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>4.2.0</version>
</dependency>

 <!-- https://mvnrepository.com/artifact/info.cukes/cucumber-testng -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-testng</artifactId>
    <version>4.2.0</version>

</dependency>

        <!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>2.21.0</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.cucumber/tag-expressions -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>tag-expressions</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-expressions -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-expressions</artifactId>
            <version>6.2.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.cucumber/messages -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>messages</artifactId>
            <version>2.1.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java8 -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java8</artifactId>
            <version>4.2.0</version>
        </dependency>



        <!-- https://mvnrepository.com/artifact/com.github.mkolisnyk/cucumber-report-generator -->
<dependency>
    <groupId>com.github.mkolisnyk</groupId>
    <artifactId>cucumber-report-generator</artifactId>
    <version>1.3</version>
</dependency>



    <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>test</scope>
        </dependency>  

        <!-- https://mvnrepository.com/artifact/io.cucumber/gherkin -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>gherkin</artifactId>
    <version>6.0.14</version>
</dependency>

        <!-- https://mvnrepository.com/artifact/info.cukes/gherkin -->
<!--<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>gherkin</artifactId>
    <version>2.12.2</version>
    <scope>provided</scope>
</dependency>-->
        <!-- https://mvnrepository.com/artifact/info.cukes/cucumber-core -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-core</artifactId>
    <version>4.2.0</version>
</dependency>



     <!-- https://mvnrepository.com/artifact/ru.sbtqa.tag/cucumber-runner -->
<dependency>
    <groupId>ru.sbtqa.tag</groupId>
    <artifactId>cucumber-runner</artifactId>
    <version>1.0.7</version>
</dependency>

黄瓜
黄瓜刺柏
4.2.0
测试
黄瓜
黄瓜爪哇
4.2.0
黄瓜
黄瓜试验
4.2.0
org.mockito
莫基托磁芯
2.21.0
测试
黄瓜
标记表达式
1.1.1
黄瓜
黄瓜表情
6.2.0
黄瓜
信息
2.1.0
黄瓜
黄瓜-java8
4.2.0
com.github.mkolisnyk
黄瓜报告生成器
1.3
org.testng
testng
6.14.3
测试
黄瓜
小黄瓜
6.0.14
黄瓜
黄瓜核
4.2.0
ru.sbtqa.tag
黄瓜赛跑者
1.0.7

检查maven pom.xml cucumber core cucumber java cumber junit

这些文件应具有相同的版本。在您的示例中,cucumber java工件id的版本与其他版本不同


尝试更改它。

在下面找到一些代码片段来解决问题

  • 检查是否有to groupid
    info.cukes

    $ mvn dependency:tree | grep 'info.cuke'
    [INFO] |  +- info.cukes:cucumber-junit:jar:1.2.5:compile
    [INFO] |  |  \- info.cukes:cucumber-core:jar:1.2.5:compile
    [INFO] |  |     +- info.cukes:cucumber-html:jar:0.2.3:compile
    [INFO] |  |     \- info.cukes:cucumber-jvm-deps:jar:1.0.5:compile
    [INFO] |  +- info.cukes:cucumber-testng:jar:1.2.5:compile
    [INFO]    |  +- info.cukes:cucumber-java:jar:1.2.5:compile
    [INFO]    |  +- info.cukes:gherkin:jar:2.12.2:compile
    
    当检查完整输出时,会显示哪个依赖项依赖于它

    ...
    [INFO] +- com.github.mkolisnyk:cucumber-report-generator:jar:1.3:compile
    ...
    [INFO] |  +- info.cukes:cucumber-junit:jar:1.2.5:compile
    ...
    [INFO] |  +- info.cukes:cucumber-testng:jar:1.2.5:compile
    ...
    [INFO] \- ru.sbtqa.tag:cucumber-runner:jar:1.0.7:compile
    [INFO] \- ru.sbtqa.tag:cucumber-runner:jar:1.0.7:compile
    [INFO]    +- ru.yandex.qatools.allure:allure-cucumber-jvm-adaptor:jar:1.6.4:compile
    ...
    [INFO]    |  +- info.cukes:cucumber-core:jar:1.2.5:compile
    ...
    [INFO]    |  +- info.cukes:cucumber-java:jar:1.2.5:compile
    [INFO]    |  +- info.cukes:gherkin:jar:2.12.2:compile
    ...
    [INFO]    +- info.cukes:cucumber-junit:jar:1.2.5:compile
    
  • 由于可能存在具有相同限定名称的类的重叠,因此在
    pom.xml

        <dependency>
            <groupId>com.github.mkolisnyk</groupId>
            <artifactId>cucumber-report-generator</artifactId>
            <version>1.3</version>
            <exclusions>
                <exclusion>
                    <groupId>info.cukes</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
  • 当我们显式地定义依赖项
    io.cucumber:gherkin
    时,它可能与指定的
    相关,注释掉它以查看是否获取了另一个版本

    <!--<dependency>-->
        <!--<groupId>io.cucumber</groupId>-->
        <!--<artifactId>gherkin</artifactId>-->
        <!--<version>6.0.14</version>-->
    <!--</dependency>-->
    
  • 通过这些更改,至少可以运行
    TestNG
    单元测试

    作为依赖项
    com.github.mkolisnyk:cucumber报告生成器
    ru.sbtqa.tag:cucumber runner
    依赖项,它们可能不再正常工作。要解决此类问题,您可以:

    • 检查可能不依赖于组id的较新版本
      info.cuke
    • 使用早期版本的
      io.cumber
      依赖项
    • info.cuke
      依赖项使用更细粒度的排除,而不是排除所有工件ID
    • 以上几点的结合
    • 其他一些,取决于您的用例和需求

    也许这些步骤可以帮助您找到适合您的解决方案。

    非常感谢您的详细回复!!非常感谢您极其详细的回复!!如果我尝试使用io.cucumber,为什么在步骤1中我们要查看group id info.cukes的依赖关系,我有点困惑?我相信io.cucumber是info.cuke的最新版本,因为他们更改了组id并在那里继续发展。在步骤4,如果我理解正确,因为io.gherkin是I的依赖项
    <!--<dependency>-->
        <!--<groupId>io.cucumber</groupId>-->
        <!--<artifactId>gherkin</artifactId>-->
        <!--<version>6.0.14</version>-->
    <!--</dependency>-->
    
    $ mvn dependency:tree
    ...
    [INFO] +- io.cucumber:cucumber-core:jar:4.2.0:compile
    [INFO] |  +- io.cucumber:cucumber-html:jar:0.2.7:compile
    [INFO] |  +- io.cucumber:gherkin:jar:5.1.0:compile