当前位置: 首页 > 知识库问答 >
问题:

JUnit 5的Cucumber:未找到功能,未执行测试

戚衡
2023-03-14

我使用了一段时间,因为cucumber与JUnit 4,但目前我需要第一次使用它与JUnit 5,它似乎不工作。我有以下依赖项:

    ...
    <dependency>
      <groupId>org.junit.platform</groupId>
      <artifactId>junit-platform-launcher</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.vintage</groupId>
      <artifactId>junit-vintage-engine</artifactId>
      <scope>test</scope>
    </dependency>
    ...
    <dependency>
      <groupId>io.cucumber</groupId>
      <artifactId>cucumber-java</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.cucumber</groupId>
      <artifactId>cucumber-junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.cucumber</groupId>
      <artifactId>cucumber-junit-platform-engine</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.cucumber</groupId>
      <artifactId>cucumber-picocontainer</artifactId>
      <scope>test</scope>
    </dependency>
    ...

我使用的故障安全maven插件配置如下:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <configuration>
          <groups>profileServer</groups>
          <systemPropertyVariables>
            <jacoco-agent.destfile>${project.build.directory}/jacoco-it.exec</jacoco-agent.destfile>
          </systemPropertyVariables>
        </configuration>
        <executions>
          <execution>
            <id>integration-test</id>
            <phase>integration-test</phase>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

测试类如下所示:

@Cucumber
@Tag("profileServer")
public class CustomersCucumberIT
{
}

在这里,我使用@Tag注释,它取代了JUnit4@类别,以便根据故障保险maven插件中配置的元素选择性地执行测试,如上所述。

fetaures文件位于src/main/test/resources/features/it中,其名称为customers。特征。

最后但并非最不重要的一点是,以下是steps类:

@Tag("profileServer")
public class CustomersCucumberSteps
{
  ...
}

运行验证目标将显示以下输出:┌─────────────────────────────────────────────────────────────────────────────┐ │ 与您的团队分享您的cucumber报告,网址为https://reports.cucumber.io │ │ 使用以下选项之一激活发布:│ │ │ │ src/测试/资源/cucumber。性状:cucumber。出版启用=真│ │ 环境变量:CUCUMBER\u PUBLISH\u ENABLED=true│ │ JUnit:@CucumberOptions(publish=true)│ │ │ │ 更多信息请访问https://reports.cucumber.io/docs/cucumber-jvm │ │ │ │ 要禁用此消息,请添加Cumber。出版安静=忠实于│ │ src/测试/资源/cucumber。性质│ └─────────────────────────────────────────────────────────────────────────────┘

但是简单地跳过测试执行,就好像没有任何测试一样。以前,对于JUnit4,我使用@CucumberOptions来设置特性位置。但是JUnit5不再支持这种注释,我也找不到其他注释。看来它应该被发现。

我看过几篇文章提到功能文件可能在failsafe或surefire maven插件中配置为:

...
<options>
  <configurationParameters>
    ...
  </configueationParameters>
</options>
...

但是这种语法似乎不受支持,无论如何,我没有找到任何可以用来配置步骤的参数。

有人能告诉我这一点,并提供一个简单的例子吗?

非常感谢。

西摩

共有2个答案

裴哲
2023-03-14

我在回答我自己的问题。事实上,在我的例子中使用的Cucumber 6.7.0似乎无法正确解释JUnit 5“@Tag”注释。在上面介绍的当前测试用例中,注释掉故障保护插件配置中的“groups”语句(用于过滤测试执行)的行为符合预期,即执行所有测试。保持此语句未注释,并且无论“@Tag”注释定义了什么,都将跳过所有测试。

但是,JUnit4“@Category”注释按预期工作,即过滤正常。因此,为了基于(例如)maven概要文件过滤Cucumber测试的执行,只有JUnit4风格可以工作。

蓟捷
2023-03-14

https://github.com/cucumber/cucumber-jvm/blob/main/junit-platform-engine/src/main/java/io/cucumber/junit/platform/engine/Cucumber.java

https://github.com/cucumber/cucumber-jvm/tree/main/junit-platform-engine

Maven Surefire和Gradle还不支持发现非基于类的测试(参见:Gradle/#4773,Surefire-1724)。

作为一种解决方案,您可以使用@Cucumber注释。Cucumber将扫描带有@Cucumber注释的类的包以获取功能文件。

因此,如果runner类是src/test/java/com/example/RunCucumberIT,那么功能文件应该位于src/test/resources/com/example中。

 类似资料:
  • 在我的cucumber -jvm、Maven、junit设置中,我的testRunner文件为 我在上面提到的目录中有我的特征文件。 如果运行它,我会得到以下异常: 如果我删除testrunner中的“features”选项,它会尝试在与我的testrunner.java相同的目录中查找功能文件 如果我把功能文件放在那里,它就可以工作了。 我的问题是,为什么我的特征文件没有从我以前的位置提取,我以

  • 但是有了这种依赖关系 未找到任何测试 Feb 22,2018 2:41:28 PM org.junit.platform.launcher.core.defaultlauncher handleThrowable警告:ID为'junit-jupiter'的TestEngine未能发现测试java.lang.noSuchMethoderRor:org.junit.platform.engine.su

  • 有没有人能告诉我为什么我不能使用Maven运行任何测试。 已配置SureFire插件 在runner类下设置胶合代码 “测试”被追加到runner类 注意:如果我将文件作为Junit运行,那么它可以正确地运行所有场景。只有当我使用Maven运行它时,才不会运行任何测试。

  • 我在src/test/resources/feature/中有以下功能文件(单独的功能文件),我想并行运行它们。比如:一个功能文件必须在chrome中执行,另一个必须在另一个chrome实例中执行,如@Tags name所述。 我正在使用Java1.2。5版本,AbstractTestNGCucumberTests作为runner。我可以运行一个功能文件,但当我尝试使用cucumber jvm并行

  • 我正在尝试编写一个函数,如果< code > selection _ Match = = ' No Match ' then < code > DNB = score _ difference 0.02 然而,我返回相同的df,没有任何修改 虽然它应该回来 Lorem ipsum dolor sit amet,consecetur adipiscing elit,sed do eiusmod te

  • 我在安装Psycopg2时遇到了麻烦。尝试时出现以下错误: 但问题是实际上在我的中;它运行起来没有任何问题: 我对这些错误感到困惑。有人能帮忙吗? 顺便说一下,我所有命令。我也在RHEL 5.5上。