Как запустить тесты огурца из класса java TestRunner

Работа с cucumber-groovy-example

результат:

/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() нуждается в имени класса в качестве аргумента.


person kamal    schedule 21.04.2016    source источник
comment
Это может помочь.   -  person MikeJRamsey56    schedule 22.04.2016


Ответы (2)


Один из способов — использовать средство запуска командной строки. Класс Java Время выполнения позволяет выполнять командную строку изнутри Java. Ключ — cucumber.api.cli.Main.

Что-то вроде этого:

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']
        }
    }
}
person MikeJRamsey56    schedule 23.04.2016

другим способом может быть создание задачи и включение класса бегуна для теста

build.gradle-
task RunCukesTest(type: Test) << {
include "RunCukesTest.class"
}

your class - 
@RunWith(Cucumber.class)
@CucumberOptions(dryRun = false, strict = true, features = "src/test/resources", glue 
= "com.gradle.featuretests",monochrome = true)
public class RunCukesTest {
}

А затем просто запустите следующую команду: -

gradle RunCukesTest

person Jayshree Pancholi    schedule 27.11.2018
comment
Пожалуйста, включите небольшое объяснение того, как это поможет в решении проблемы @JayshreePancholi. Цель состоит в том, чтобы искателю ответа было легче понять решение. - person Harshith Rai; 27.11.2018