如何在运行黄瓜测试时启动 Spring @Autowired 实例?



当我对 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?

最新更新