我不确定如何使用AbstractTestNGCucumberTests在Eclipse中启动runner类
我有一个项目设置,旨在使用TestNG来运行Cucumber测试套件。
我已经按照我能找到的所有文档中的所有步骤进行了操作,但我无法做到 以识别testNG注释的方式启动跑步者 类,例如@BeforeMethod
如果我在跑步者类中取消注释@RunWith线,该项目作为Junit测试运行正常,但是当我评论@RunWith时,它不会作为TestNG项目启动,并且仍然表现为junit项目。 / p>
如果我选择CukesRunner,请点击" Run-As"没有显示运行类型,我只能选择从历史记录中将其作为Junit运行。我找不到启动Cukesrunner的方法,以便它调用AbstractTestNGCucumberTests类的TestNG行为。
TestNG插件在这个系统上工作正常,testNG启用项目在不包含黄瓜或AbstractTestNGCucumberTests类时运行正常。
以下是该项目的关键组成部分:
的testng.xml
var SomeSchema = new Schema({
countries : [{type : ObjectId}],
cities : [{type : ObjectId}]
})
的pom.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Cucumber-numbers-game" >
<test name="Play_Games" >
<classes>
<class name="com.example.GameSteps" />
</classes>
</test>
</suite>
CukesRunner.java
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>example</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-testng</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.1.3</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
GameSteps.java
package com.example;
import cucumber.api.junit.Cucumber;
// import org.junit.runner.RunWith;
import cucumber.api.testng.AbstractTestNGCucumberTests;
// @RunWith(Cucumber.class)
@Cucumber.Options(
features={"src/test/resources"}
)
public class CukesRunner extends AbstractTestNGCucumberTests{}
Game.feature
package com.example;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import org.testng.annotations.*;
import static org.junit.Assert.assertEquals;
public class GameSteps {
private Game _target;
private String _actualResult;
@BeforeMethod
public void setUp() {
System.out.println("@BeforeMethod: The annotated method will be run before each test method.");
}
@Test
@Given("^I am officiating a \"([^\"]*)\" game$")
public void I_am_officiating_a_game(String gameTypeName) {
System.out.println("^I am officiating a \"([^\"]*)\" game$");
GameType gameType = GameType.valueOf(gameTypeName);
_target = GameFactory.createGame(gameType);
}
@When("^the number (\\d+) is played$")
public void the_number_is_played(int playedNumber) {
System.out.println("^the number (\\d+) is played$");
_actualResult = _target.checkPlay(playedNumber);
}
@Then("^I should be told the correct answer is \"([^\"]*)\"$")
public void I_should_be_told_the_correct_answer_is(String expectedResult) {
System.out.println("^I should be told the correct answer is \"([^\"]*)\"$");
assertEquals(expectedResult, _actualResult);
}
}
以下是项目结构的屏幕截图:
答案 0 :(得分:0)
是的,从cukes runner运行测试时没有testNG运行类型,但是仍然可以通过手动创建运行配置文件从cukes runner执行它(只需在testNG运行配置中指定类),但我相信它不是最好的方法,所以如果你想在本地执行你的功能,我建议2个选项:
cucumber.options
参数
单一功能我发现由于某些原因,您尝试在Steps类中使用testNG注释,排除@Test
和@BeforeMethod
注释,如果您需要设置测试,请考虑使用{{来自Cucumber API的1}}注释,您实际上甚至可以像这样指定@Before
的顺序:
@Before's
根本不需要@Before(order=1)
注释,您可以在功能文件中指定测试。
P.S。哦,我认为您需要在@Test
部分的cukes runner类中添加glue
选项
希望它有所帮助。