Spring boot 黄瓜+;TestNG+;弹簧靴
跑步者级别:Spring boot 黄瓜+;TestNG+;弹簧靴,spring-boot,testng,integration-testing,cucumber-java,Spring Boot,Testng,Integration Testing,Cucumber Java,跑步者级别: @CucumberOptions(plugin = "json:target/cucumber-report.json") @Test(groups = "slow") public class RunCukesTest extends AbstractTestNGCucumberTests { } 步骤定义类: @ContextConfiguration(loader=SpringApplicationContextLoader.class, classes = {Appli
@CucumberOptions(plugin = "json:target/cucumber-report.json")
@Test(groups = "slow")
public class RunCukesTest extends AbstractTestNGCucumberTests {
}
步骤定义类:
@ContextConfiguration(loader=SpringApplicationContextLoader.class, classes = {Application.class,MarketDataServiceMockConfig.class})
@WebIntegrationTest({"server.port=0", "management.port=0"})
@TestExecutionListeners(inheritListeners = false, listeners = {
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class })
public class MyStepdefs extends AbstractTestNGCucumberTests {
private MockMvc mockMvc;
@Autowired
private FilterChainProxy filterChainProxy;
@Autowired
private WebApplicationContext wac;
@Before
public void setUp() {
wac = (EmbeddedWebApplicationContext) SpringApplication.run(Application.class);
}
}
filterChainProxy和wac不是自动连接的,为什么
感谢您的帮助。Cucumber和TestNG都是测试框架。Cucumber是BDD测试的工具,TestNG是单元/集成测试的工具。我认为尝试将Cucumber与TestNG集成是没有意义的。这就像将JUnit与TestNG集成一样 因此,如果您想使用Spring执行Cucumber测试,那么有一个模块
Cucumber-Spring
您将有类似于主测试执行器的内容:
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(format={"pretty", "html:target/cucumber"})
public class RunTests {
}
您将在定义Spring上下文的类中定义步骤:
@ContextConfiguration(YourContext.class)
public class StepDefinitions {
@Autowired
private YourBean yourBean;
@Given("^your given line$")
public void givenLine() {
//...
}
@When("^your when line$")
public void whenLine() {
//...
}
@Then("^your then assertions$")
public void thenAssertions() {
//...
}
}
在运行main classRunTests
之后,它将尝试查找小黄瓜文件并将它们与步骤匹配。跨Java类的步骤结构如何并不重要
但我必须警告你们,Cucumber首先是用Ruby设计的,所以一些概念对Java程序员来说可能非常奇怪。步骤之间的状态共享需要通过一些类级变量来完成。不允许重复步骤。如果需要在两个不同类中定义的步骤之间共享状态,则需要使用一些全局对象。为了将Cucumber和Spring测试与TestNG而不是JUnit一起使用,只需在步骤定义中扩展
AbstractTestNGSpringContextTests
,其余代码保持不变
完整代码: pom.xml
<!-- TestNG -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
<scope>test</scope>
</dependency>
<!-- Cucumber with TestNG -->
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-testng</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Spring Test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!-- Cucumber with Spring -->
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-spring</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
步骤定义
@ContextConfiguration(loader=SpringApplicationContextLoader.class, classes = {Application.class,MarketDataServiceMockConfig.class})
@WebIntegrationTest({"server.port=0", "management.port=0"})
@TestExecutionListeners(inheritListeners = false, listeners = {
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class })
// Notice that the class extends AbstractTestNGSpringContextTests now
public class MyStepdefs extends AbstractTestNGSpringContextTests {
private MockMvc mockMvc;
@Autowired
private FilterChainProxy filterChainProxy;
@Autowired
private WebApplicationContext wac;
@Before
public void setUp() {
wac = (EmbeddedWebApplicationContext) SpringApplication.run(Application.class);
}
}
我认为尝试将Cucumber与TestNG集成是没有意义的。这就像将JUnit与TestNG集成一样。->不,这是有意义的,因为您可以将TestNG断言和工具与测试描述一起使用。它是完全兼容的(例如并行性)。参考cucumber doc@marie,也许你没有注意到这个答案是在2016年写的。cucumber testng的第一个版本于2017年开始出现在maven central。如果某些答案已经过时,请随意创建单独的答案。是的,对不起,我没有注意日期。不幸的是,我没有答案来帮助我,因为我在cucumber testng和spring boot方面也有问题project@luboskrnaccucumber testng存在于2016年,它位于info.cukes组下(与所有cucumber软件包一样)。尽管如此,Cucumber仍然需要步骤定义的测试断言,因为它本身不提供这些断言。因此,如果这是您的单元测试框架,那么将Cucumber与TestNG集成是有意义的。
@ContextConfiguration(loader=SpringApplicationContextLoader.class, classes = {Application.class,MarketDataServiceMockConfig.class})
@WebIntegrationTest({"server.port=0", "management.port=0"})
@TestExecutionListeners(inheritListeners = false, listeners = {
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class })
// Notice that the class extends AbstractTestNGSpringContextTests now
public class MyStepdefs extends AbstractTestNGSpringContextTests {
private MockMvc mockMvc;
@Autowired
private FilterChainProxy filterChainProxy;
@Autowired
private WebApplicationContext wac;
@Before
public void setUp() {
wac = (EmbeddedWebApplicationContext) SpringApplication.run(Application.class);
}
}