结果:
/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/calc/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 -jar build/distributions/cucumber-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() 需要一个类名作为参数