1

AbstractTestNGCucumberTests を使用して Eclipse 内でランナー クラスを起動する方法がわかりません

TestNG を使用して Cucumber テスト スイートを実行するためのプロジェクトをセットアップしました。

見つけたすべてのドキュメントのすべての手順に従いましたが、@BeforeMethod などのクラスの testNG アノテーションを認識する方法でランナーを起動できません。

ランナー クラスの @RunWith 行のコメントを外すと、プロジェクトは Junit テストとして正常に実行されますが、@RunWith をコメントすると、TestNG プロジェクトとして起動せず、junit プロジェクトとして動作します。

CukesRunner を選択して [Run-As] をクリックすると、実行タイプは表示されず、履歴レコードから Junit として実行することしか選択できません。AbstractTestNGCucumberTests クラスの TestNG 動作を呼び出すような Cukesrunner を起動する方法が見つかりません。

TestNG プラグインはこのシステムで正常に動作しており、キュウリや AbstractTestNGCucuberTests クラスが含まれていない場合、testNG 対応プロジェクトは正常に実行されます。

プロジェクトの主要コンポーネントは次のとおりです。

testng.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>

pom.xml

<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>

CukesRunner.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{}

GameSteps.java

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);
    }
}

ゲーム機能

Feature: Number Games
  So that plays can be validated
  As a number game umpire
  I want to enter a play and see the correct answer

  Scenario Outline: A game of FizzBuzz
    Given I am officiating a "FizzBuzz" game
    When the number <played> is played
    Then I should be told the correct answer is "<result>"

  Examples:
    | played | result   |
    | 1      | 1        |
    | 2      | 2        |
    | 3      | Fizz     |
    | 5      | Buzz     |
    | 6      | Fizz     |
    | 10     | Buzz     |
    | 15     | FizzBuzz |

  Scenario Outline: A game of Crash Bang Wallop
    Given I am officiating a "CrashBangWallop" game
    When the number <played> is played
    Then I should be told the correct answer is "<result>"

  Examples:
    | played | result          |
    | 1      | 1               |
    | 2      | 2               |
    | 3      | Crash           |
    | 5      | Bang            |
    | 7      | Wallop          |
    | 15     | CrashBang       |
    | 35     | BangWallop      |
    | 21     | CrashWallop     |
    | 105    | CrashBangWallop |

プロジェクト構造のスクリーンショットを次に示します。

プロジェクト構造のスクリーンショットを次に示します。

4

1 に答える 1

0

はい、cukes ランナーからテストを実行しているときに testNG 実行タイプはありませんが、手動で実行プロファイルを作成することで cukes ランナーから実行することは可能です (testNG 実行構成でクラスを指定するだけです)。それを行う最善の方法なので、機能をローカルで実行したい場合は、2 つのオプションを提案します。

  • cucumber.options単一の機能を実行したい場合は、Mavenを使用して引数を指定します
  • キュウリ機能ランナーの使用 (インストールするには、Eclipse に次のリポジトリを追加します: https://cucumber.io/cucumber-eclipse/update-site )

何らかの理由で、Steps クラスで testNG アノテーションを使用しようとしていることがわかりました。除外@Testおよび@BeforeMethodアノテーションです。テストをセットアップする必要がある場合は@Before、Cucumber API のアノテーションの使用を検討してください。実際には、次の@Before'sように順序を指定することもできます。

@Before(order=1)

@Test注釈はまったく必要ありません。機能ファイルでテストを指定しています。

PSああ、セクションglueのcukesランナークラスにオプションを追加する必要があると思います@CucumberOptions

それが役に立てば幸い。

于 2016-08-18T19:36:46.683 に答える