不确定如何使用AbstractTestNGCucumberTests启动跑步者

时间:2016-08-17 16:35:23

标签: testng cucumber-jvm cucumber-java testng-eclipse

我不确定如何使用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);
    }
}

以下是项目结构的屏幕截图:

Here is a screenshot of the project structure:

1 个答案:

答案 0 :(得分:0)

是的,从cukes runner运行测试时没有testNG运行类型,但是仍然可以通过手动创建运行配置文件从cukes runner执行它(只需在testNG运行配置中指定类),但我相信它不是最好的方法,所以如果你想在本地执行你的功能,我建议2个选项:

我发现由于某些原因,您尝试在Steps类中使用testNG注释,排除@Test@BeforeMethod注释,如果您需要设置测试,请考虑使用{{来自Cucumber API的1}}注释,您实际上甚至可以像这样指定@Before的顺序:

@Before's

根本不需要@Before(order=1) 注释,您可以在功能文件中指定测试。

P.S。哦,我认为您需要在@Test部分的cukes runner类中添加glue选项

希望它有所帮助。