Cucumber 和 TestNG 参数冲突

Cucumber and TestNG Parameters conflict

我无法通过 Cucumber 功能文件设置参数,因为 TestNG 因参数冲突而抛出错误

"Cannot inject @Test annotated Method [days_of_the_week_is_enabled_by_default] with [class java.lang.String, class java.lang.String]" 

正如您从下面的代码片段中看到的,我正在使用 Cucumber 的功能文件将参数传递给方法,但是当我添加 testNG 注释 @Test 时,它会抛出一个错误,因为无法注入 @Test。

我知道如何在 TestNG 中使用参数,但我希望参数取自特征文件而不是 TestNG 参数。无论如何我们可以做到这一点?

@Test
@Then("^(.*) is (.*) by default$")
public void days_of_the_week_is_enabled_by_default(String dOWeek, String status) {
        draftPage.daysSelectionDefault(dOWeek, status);
    }

那是做不到的。您可以使用 TestNG 作为 运行ner 运行 基于黄瓜的测试。但这可能会导致 TestNG 创建一个 @Test 方法,该方法 运行 包含所有功能文件。您也可以替换 TestNG 并使用 JUnit。

您可能需要使用其他机制(例如 JVM 参数)来将参数传递给您的 Cucumber 测试。

另一种选择是构建一个 TestNG 侦听器,并从中获取 ITestContext 并通过测试上下文提取参数。

//This class is not thread safe, and will give unpredictable results
//if you multiple <test> tags running.
import org.testng.ITestContext;
import org.testng.ITestListener;

public class LocalListener implements ITestListener {

  private static LocalListener instance;
  private ITestContext testContext;

  private static void setInstance(LocalListener obj) {
    instance = obj;
  }

  public static LocalListener getInstance() {
    return instance;
  }

  public LocalListener() {
    setInstance(this);
  }

  @Override
  public void onStart(ITestContext context) {
    this.testContext = context;
  }

  public ITestContext getTestContext() {
    return testContext;
  }
}