在Main类中运行Cucumber和Spring启动

时间:2017-08-31 05:24:18

标签: java spring spring-boot cucumber-jvm cucumber-java

我的要求是使用Spring启动运行Cucumber测试用例来运行Custom java主类。 如果我使用以下配置类,我可以运行Cucumber测试套件: -

@RunWith(Cucumber.class)
@CucumberOptions(
       plugin = {
            "html:target/cucumber-html-report",
            "json:target/cucumber.json", "pretty:target/cucumber-
             pretty.txt",
            "usage:target/cucumber-usage.json", "junit:target/cucumber-
            results.xml" },
            features = { "src/test/resources" },
            tags = {"@passed"},
            glue =  "cucumberTest.steps")

 public class RunGwMLCompareTests {

 }

按照课程加载

   @RunWith(SpringRunner.class)
   @ActiveProfiles("dev")
   @SpringBootTest(classes = Application.class)
   public class AbstractDefinitions {
         public AbstractDefinitions() {
          }
    }

当我运行RunGwMLCompareTests类时,现在使用此配置我的Cucumber测试用例正在运行,它加载我的Spring启动上下文,然后超出功能中定义的所有情况。

现在我的问题是我想从单独的主java类运行它。我创建了我的java类,如下所示: -

package cucumberTest;

import cucumber.runtime.ClassFinder;
import cucumber.runtime.RuntimeOptions;
import cucumber.runtime.io.MultiLoader;
import cucumber.runtime.io.ResourceLoader;
import cucumber.runtime.io.ResourceLoaderClassFinder;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class CucumberMainTest {
    public static void main(String[] args) throws IOException {
        ClassLoader classLoader = CucumberMainTest.class.getClassLoader();
        ResourceLoader resourceLoader = new MultiLoader(classLoader);
        ClassFinder classFinder = new 
        ResourceLoaderClassFinder(resourceLoader, classLoader);
        List<String> pluginList = new ArrayList<>();
        pluginList.add("--plugin");
        pluginList.add("html:target/cucumber-html-report");
        pluginList.add("--plugin");
        pluginList.add("json:target/cucumber.json");
        RuntimeOptions ro = new RuntimeOptions(pluginList);
        ro.getFilters().add("@passed");
        ro.getFeaturePaths().add("src/test/resources");
        ro.getGlue().add("cucumberTest/steps");
        cucumber.runtime.Runtime runtime = new 
        cucumber.runtime.Runtime(resourceLoader, classFinder, classLoader,
            ro);
        runtime.run();

    }
}

它执行我的测试用例但是没有加载我的SpringContext,因此没有加载spring bean而且我得到空指针异常..任何帮助都非常感激。

此致 维克拉姆帕坦尼亚

1 个答案:

答案 0 :(得分:0)

我发现一个解决方案是从外部运行RunGwMLCompareTests类,它自动处理我的Spring上下文。 所以基本上我使用gradle来创建批处理文件,它只会在我的类路径中自动创建一个包含所有相对依赖项的批处理,然后运行以下命令:

   "%JAVA_EXE%" -classpath "%CLASSPATH%" org.junit.runner.JUnitCore  
   cucumberTest.runners.RunGwMLCompareTests

其中,

     JAVA_EXE=C:\Program Files\Java\jdk1.7.0_65/bin/java.exe

CLASSPATH是lib文件夹,其中存在所有jar。

    CLASSPATH=%APP_HOME%\lib\*.jar

现在运行此批处理我正在使用

features = { "src/test/resources" } <tag> 

将我的要素文件放在外面,以便可以即时编辑。 我希望这有助于那里的人。

通过这样做,我能够运行RunGwMLCompareTests类。 现在使用这个配置我的Cucumber测试用例正在运行,它还加载我的Spring启动上下文,然后超出功能中定义的所有情况。

此致 维克拉姆帕坦尼亚