【问题标题】:Cucumber: Class not found com.example.runner.RunnerTest黄瓜:找不到类 com.example.runner.RunnerTest
【发布时间】:2017-07-15 07:21:54
【问题描述】:

我有一个maven 项目要运行cucumberselenium*.feature文件在src/features中定义,步骤在src/test/java/com/example/steps中定义。

我还定义了一个测试运行器类,如下所示:

package com.example.runner;

import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(
             features={"src/features"},
             glue="com/example/steps")
public class RunnerTest {

}

问题是:当我运行它抱怨的课程时:

Class not found com.example.runner.RunnerTest
java.lang.ClassNotFoundException: com.example.runner.RunnerTest
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:688)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:421)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

问题是,为什么不识别跑步者的名字?


更新:

当我运行功能文件时

打开特征文件->右键->运行为->1个黄瓜特征

效果不错

我将 glue="com/example/steps" 更改为 glue="com.example.steps" 并抱怨:

java.lang.NullPointerException
    at com.example.steps.Click_Steps.i_am_in(Click_Steps.java:23)
    at ✽.Given I am in "http://suvian.in/selenium/1.6checkbox.html"(CheckBox.feature:14)

当我参考文件时:

base.getDriver().navigate().to(uri);

但正如我所说,当我使用 Run as -> Cucumber 运行功能文件时,这条线工作得很好

【问题讨论】:

    标签: java maven cucumber cucumber-jvm


    【解决方案1】:

    我知道这已经晚了。但是尝试执行以下操作,这应该会起作用。

    转到项目 -> 清理。

    重新运行 Runner 类。

    【讨论】:

      【解决方案2】:

      你可以通过两种方式解决这个问题:

      解决方案 1: 清理您的项目
      解决方案 2: 右键单击​​ 项目 -> Maven -> 更新项目 -> 检查框:强制更新快照或版本 -> OK 然后运行您的套件

      【讨论】:

        【解决方案3】:

        我会考虑通过以下方式重新组织您的结构:

        src/
        ├── main/
        │   └── java/
        |        └── ...
        │   
        └── test/
            ├── java/
            |    └── com.example/
            |         ├── checkbox/
            |         |    ├── CheckboxSteps/
            |         |    └── CheckboxTest/
            |         ├── click_button/
            |         |    ├── ClickButtonSteps/
            |         |    └── ClickButtonTest/
            |         └── ...
            |
            └── resources/
                 └── features/
                      ├── checkbox/
                      |    └── checkbox.feature/
                      ├── click_button/
                      |    └── ClickButton.feature/
                      └── ...
        

        这将在测试失败的情况下改善您的代码组织和可追溯性。

        CheckboxTest 应如下所示:

        package com.example.checkbox;
        
           import cucumber.api.CucumberOptions;
           import cucumber.api.SnippetType;
           import cucumber.api.junit.Cucumber;
           import org.junit.runner.RunWith;
        
           @RunWith(Cucumber.class)
           @CucumberOptions(
                        snippets = SnippetType.CAMELCASE,
                        glue = {"com.example.checkbox"},
                        features = "classpath:features/checkbox")
           public class CheckboxTest {
        
            /*
            * This class should be empty, step definitions should be in separate classes.
            */
        
           }
        

        然后将您的步骤定义放入CheckboxSteps

        你现在应该可以运行CheckboxTest了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-10
          相关资源
          最近更新 更多