2016-04-21 17 views
0

與工作運行黃瓜測試cucumber-groovy-example如何從一個Java類的TestRunner

結果:

/opt/gradle/gradle-2.7/bin/gradle clean cucumber uberJar 
:clean 
:compileJava 
warning: [options] bootstrap class path not set in conjunction with -source 1.6 
1 warning 
:compileGroovy UP-TO-DATE 
:processResources UP-TO-DATE 
:classes 
:jar 
:startScripts 
:distTar 
:distZip 
:assemble 
:cucumber 
# language: en 
Feature: Division 
    In order to avoid silly mistakes 
    Cashiers must be able to calculate a fraction 
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 

    @important 
    Scenario: Regular numbers     # calc/division.feature:7 
    Given I have entered 3 into the calculator # CalculatorSteps.groovy:31 
    And I have entered 2 into the calculator # CalculatorSteps.groovy:31 
    When I press divide      # CalculatorSteps.groovy:39 
    Then the stored result should be 1.5  # CalculatorSteps.groovy:43 

    Scenario: More numbers      # calc/division.feature:13 
    Given I have entered 6 into the calculator # CalculatorSteps.groovy:31 
    And I have entered 3 into the calculator # CalculatorSteps.groovy:31 
    When I press divide      # CalculatorSteps.groovy:39 
    Then the stored result should be 2.0  # CalculatorSteps.groovy:43 

2 Scenarios (2 passed  ) 
8 Steps (8 passed  ) 
0m0.186s 

:uberJar 

BUILD SUCCESSFUL 

Total time: 19.643 secs 

This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.7/userguide/gradle_daemon.html 

如何從Java文件中運行相同的測試:例如

的src/main/JAVA /鈣/ TestRunner.java

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

@RunWith(Cucumber.class) 
@CucumberOptions(format = {"pretty"}, monochrome=true) 

public class TestRunner { 

       public static void main(String[] args) { 
            System.out.println("dummy main java"); 
// I want to run the tests from within the jar file 

              } 
} 

這樣,當我做Java的罐子建立/發行/黃瓜JVM的Groovy的example.jar

我應該得到相同的結果時,我使用的gradle運行通過命令行測試

我用下面的Java類:

import org.junit.*; 
import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 
import cucumber.api.CucumberOptions; 
import cucumber.api.junit.Cucumber; 
import org.junit.runner.RunWith; 
import java.util.ArrayList; 
import java.util.List; 
import org.junit.runner.notification.Failure; 

@RunWith(Cucumber.class) 
@CucumberOptions(format = {"pretty"}, monochrome=true) 

public class TestRunner { 

     public static void main(String[] args) { 
      System.out.println("dummy main java"); 
     JUnitCore.main("cucumberTest.TestRunner"); 
    } 
} 

但有例外:

initializationError(org.junit.runner.JUnitCommandLineParseResult) 
java.lang.IllegalArgumentException: Could not find class [cucumberTest.TestRunner] 
     at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:102) 
     at org.junit.runner.JUnitCommandLineParseResult.parseArgs(JUnitCommandLineParseResult.java:50) 
     at org.junit.runner.JUnitCommandLineParseResult.parse(JUnitCommandLineParseResult.java:44) 
     at org.junit.runner.JUnitCore.runMain(JUnitCore.java:72) 
     at org.junit.runner.JUnitCore.main(JUnitCore.java:36) 
     at TestRunner.main(TestRunner.java:19) 
Caused by: java.lang.ClassNotFoundException: cucumberTest.TestRunner 

這讓我想到,JUnitCore.main()需要一個類名作爲參數

+0

[這](https://cucumber.io/docs/reference/jvm#running-cucumber)可能的幫助。 – MikeJRamsey56

回答

0

的一種方法是使用command line runner。 Java類Runtime允許您從Java內執行命令行。關鍵是cucumber.api.cli.Main

喜歡的東西this

task cucumber() { 
dependsOn assemble, compileTestJava 
doLast { 
    javaexec { 
     main = "cucumber.api.cli.Main" 
     classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output 
     args = ['--plugin', 'pretty', '--glue', 'gradle.cucumber', 'src/test/resources'] 
     } 
    } 
}