2017-07-15 84 views
0

我有一个maven项目运行cucumberselenium。在src/features中定义了*.feature文件,并且在src/test/java/com/example/steps中定义了这些步骤。黄瓜:找不到类com.example.runner.RunnerTest

enter image description here

我还定义如下的测试转轮类:

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

回答

0

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

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