我的要求是使用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而且我得到空指针异常..任何帮助都非常感激。
此致 维克拉姆帕坦尼亚
答案 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启动上下文,然后超出功能中定义的所有情况。此致 维克拉姆帕坦尼亚