当我对 StepDefinition 进行解散时,我可以启动 Spring.java,但从 gradle 运行测试会产生null。我需要附加胶吗?
产生空:格拉德尔黄瓜
生成空:运行myFeature.features
生成 myService(工作(:运行 Stepdefinitions.java
我尝试了以下代码:
@ContextConfiguration(
classes = Application.class,
loader = SpringBootContextLoader.class)
@WebAppConfiguration
当前步骤定义:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
@WebAppConfiguration
public class StepDefinitions{
private static String roll;
@Autowired
MyService myService;
/** Reset all static values before running test cases */
@BeforeClass
public static void resetValues() {
roll = "";
}
//I use swedish, "Given"
@Givet("Jag har rollen {string}")
public void getRole(String roll) {
assertNotNull(roll);
this.roll = roll;
myService.useRole(roll);
}
}
gradle.build:
dependencies {
compile files('../libs/cucumber-spring-4.7.1.jar')
testCompile 'io.cucumber:cucumber-java:' + cucumberVersion
testCompile 'io.cucumber:cucumber-junit:' + cucumberVersion
...
}
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', 'steps/rufs',
'src/test/resources/features', '--tags','@rufs']
}
}
}
从 Gradle 运行时,您不会在任何地方参与 JUnit。@RunWith
被JUnit使用,这反过来又促使Spring参与其中。当Cucumber作为您的套件运行时,它会忽略这些注释,因为它无法理解它们。
您需要使用 JUnit 作为您的套件(即不运行cucumber.api.cli.Main
(。然后你就会遇到问题,因为你需要使用两个"跑步者":黄瓜和春天。
解决这个问题的方法是JUnit对其中一个跑步者的"规则"。春天有规律,但据我所知,黄瓜没有。在这种情况下,请使用黄瓜流道:
@RunWith(Cucumber.class)
结合 Spring 的规则,如下所述:如何使用参数化运行 JUnit SpringJUnit4ClassRunner?