黄瓜:Class 未找到 com.example.runner.RunnerTest
Cucumber: Class not found com.example.runner.RunnerTest
我有一个 maven
项目到 运行 cucumber
和 selenium
。 *.feature
文件在 src/features
中定义,步骤在 src/test/java/com/example/steps
.
中定义
我还定义了一个测试 运行ner class 如下:
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 它抱怨:
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)
问题是,为什么它不识别 运行ner calss?
更新:
当我 运行 特征文件时
打开特征文件 -> 右键单击 -> 运行 作为 -> 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
的功能文件时,这条线工作得很好
我会考虑按以下方式重新组织您的结构:
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
。
我知道这已经晚了。但请尝试执行以下操作,这应该有效。
转到项目 -> 清理。
重新运行 Runner class。
您可以通过两种方式解决这个问题:
解决方案 1:清理您的项目
解决方案 2: 右键单击 项目 -> Maven -> 更新项目 -> 勾选:强制更新快照或发布-> 确定然后运行你的套房
我有一个 maven
项目到 运行 cucumber
和 selenium
。 *.feature
文件在 src/features
中定义,步骤在 src/test/java/com/example/steps
.
我还定义了一个测试 运行ner class 如下:
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 它抱怨:
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)
问题是,为什么它不识别 运行ner calss?
更新:
当我 运行 特征文件时
打开特征文件 -> 右键单击 -> 运行 作为 -> 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
我会考虑按以下方式重新组织您的结构:
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
。
我知道这已经晚了。但请尝试执行以下操作,这应该有效。
转到项目 -> 清理。
重新运行 Runner class。
您可以通过两种方式解决这个问题:
解决方案 1:清理您的项目
解决方案 2: 右键单击 项目 -> Maven -> 更新项目 -> 勾选:强制更新快照或发布-> 确定然后运行你的套房