为@CucumberOptions 获取错误并且似乎 cucumber.class 已弃用
Getting Error for @CucumberOptions and seems cucumber.class deprecated
[我的测试运行器 Class][1]
我尝试创建 TestRunner Class(使用 Eclipse-Java11-Cucumber-Maven);然而,CucumberOptions 注释出现错误,似乎 Cucumber.class 已被弃用。请让我知道如何解决这个问题?
请参阅附图。
此外,下面是测试运行程序代码:
package TestRunner;
import io.cucumber.junit.platform.engine.Cucumber;
import io.cucumber.junit.platform.*;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
feature = "src\test\java\AppFeatures",
glue = "StepDefinitions")
public class Runner {
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[1]: https://i.stack.imgur.com/etCZ6.png
如果您查看 io.cucumber.junit.platform.engine.Cucumber
的源代码,您会发现:
package io.cucumber.junit.platform.engine;
import org.apiguardian.api.API;
import org.apiguardian.api.API.Status;
import org.junit.platform.commons.annotation.Testable;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Test discovery annotation. Marks the package of the annotated class for test
* discovery.
* <p>
* Maven and Gradle do not support the
* {@link org.junit.platform.engine.discovery.DiscoverySelectors} used by
* Cucumber. As a workaround Cucumber will scan the package of the annotated
* class for feature files and execute them.
* <p>
* Note about Testable: While this class is annotated with @Testable the
* recommended way for IDEs and other tooling use the selectors implemented by
* Cucumber to discover feature files.
* <p>
*
* @deprecated Please use the JUnit Platform Suite to run Cucumber in
* combination with Surefire or Gradle. E.g: <code><pre>{@code
*package com.example;
*
*import org.junit.platform.suite.api.ConfigurationParameter;
*import org.junit.platform.suite.api.SelectClasspathResource;
*import org.junit.platform.suite.api.Suite;
*
*import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME;
*
*@Suite
*@SelectClasspathResource("com/example")
*@ConfigurationParameter(
* key = GLUE_PROPERTY_NAME,
* value = "com.example"
*)
*public class RunCucumberTest {
*}
*}</pre></code>
* @see CucumberTestEngine
*/
@API(status = Status.DEPRECATED)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Testable
@Deprecated
public @interface Cucumber {
}
如果您使用的是 Maven,则可以使用 mvn dependency:sources
下载源代码。虽然通常您不必这样做,因为您的 IDE 可以为您做这件事。
这里有几点需要注意:
如果您搜索 JUnit 平台,您会发现它是 JUnit 5 的一部分。但是 @RunWith
是 JUnit 4 的一部分。
这意味着您将不同的框架版本混合在一起。你不能指望它会起作用。
Javadoc 中有一个代码片段建议在 JUnit 5 中使用 Cucumber 的正确方法。
package com.example;
import org.junit.platform.suite.api.ConfigurationParameter;
import org.junit.platform.suite.api.IncludeEngines;
import org.junit.platform.suite.api.SelectClasspathResource;
import org.junit.platform.suite.api.Suite;
import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME;
@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("com/example")
@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "com.example")
public class RunCucumberTest {
}
你应该考虑使用它。
每个开源项目都不一样,但看看源码也不错。可能包含文档:
https://github.com/cucumber/cucumber-jvm/tree/main/junit-platform-engine
由于这是一个 JUnit 5 引擎,因此 JUnit 5 文档也很适合阅读。
[我的测试运行器 Class][1]
我尝试创建 TestRunner Class(使用 Eclipse-Java11-Cucumber-Maven);然而,CucumberOptions 注释出现错误,似乎 Cucumber.class 已被弃用。请让我知道如何解决这个问题? 请参阅附图。
此外,下面是测试运行程序代码:
package TestRunner;
import io.cucumber.junit.platform.engine.Cucumber;
import io.cucumber.junit.platform.*;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
feature = "src\test\java\AppFeatures",
glue = "StepDefinitions")
public class Runner {
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[1]: https://i.stack.imgur.com/etCZ6.png
如果您查看 io.cucumber.junit.platform.engine.Cucumber
的源代码,您会发现:
package io.cucumber.junit.platform.engine;
import org.apiguardian.api.API;
import org.apiguardian.api.API.Status;
import org.junit.platform.commons.annotation.Testable;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Test discovery annotation. Marks the package of the annotated class for test
* discovery.
* <p>
* Maven and Gradle do not support the
* {@link org.junit.platform.engine.discovery.DiscoverySelectors} used by
* Cucumber. As a workaround Cucumber will scan the package of the annotated
* class for feature files and execute them.
* <p>
* Note about Testable: While this class is annotated with @Testable the
* recommended way for IDEs and other tooling use the selectors implemented by
* Cucumber to discover feature files.
* <p>
*
* @deprecated Please use the JUnit Platform Suite to run Cucumber in
* combination with Surefire or Gradle. E.g: <code><pre>{@code
*package com.example;
*
*import org.junit.platform.suite.api.ConfigurationParameter;
*import org.junit.platform.suite.api.SelectClasspathResource;
*import org.junit.platform.suite.api.Suite;
*
*import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME;
*
*@Suite
*@SelectClasspathResource("com/example")
*@ConfigurationParameter(
* key = GLUE_PROPERTY_NAME,
* value = "com.example"
*)
*public class RunCucumberTest {
*}
*}</pre></code>
* @see CucumberTestEngine
*/
@API(status = Status.DEPRECATED)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Testable
@Deprecated
public @interface Cucumber {
}
如果您使用的是 Maven,则可以使用 mvn dependency:sources
下载源代码。虽然通常您不必这样做,因为您的 IDE 可以为您做这件事。
这里有几点需要注意:
如果您搜索 JUnit 平台,您会发现它是 JUnit 5 的一部分。但是
@RunWith
是 JUnit 4 的一部分。这意味着您将不同的框架版本混合在一起。你不能指望它会起作用。
Javadoc 中有一个代码片段建议在 JUnit 5 中使用 Cucumber 的正确方法。
package com.example;
import org.junit.platform.suite.api.ConfigurationParameter;
import org.junit.platform.suite.api.IncludeEngines;
import org.junit.platform.suite.api.SelectClasspathResource;
import org.junit.platform.suite.api.Suite;
import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME;
@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("com/example")
@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "com.example")
public class RunCucumberTest {
}
你应该考虑使用它。
每个开源项目都不一样,但看看源码也不错。可能包含文档:
https://github.com/cucumber/cucumber-jvm/tree/main/junit-platform-engine
由于这是一个 JUnit 5 引擎,因此 JUnit 5 文档也很适合阅读。