Cucumber run test: Exception in thread "main" java.util.NoSuchElementException



我试图运行一个测试与黄瓜,但当我试图运行任何测试,与IntellJ,告诉我这个错误:

Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.ArrayList$Itr.next(ArrayList.java:1000)
at java.base/java.util.Collections.max(Collections.java:713)
at io.cucumber.core.feature.FeatureParser.parseResource(FeatureParser.java:46)
at java.base/java.util.function.BiFunction.lambda$andThen$0(BiFunction.java:70)

我的POM:

<dependency>
<groupId>io.cucumber</groupId>
<artifactId>messages</artifactId>
<version>21.0.1</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<version>${cucumber.version}</version>
<exclusions>
<exclusion>
<groupId>io.cucumber</groupId>
<artifactId>messages</artifactId>
</exclusion>
<exclusion>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-gherkin-messages</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<exclusions>
<exclusion>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-core</artifactId>
</exclusion>
<exclusion>
<groupId>io.cucumber</groupId>
<artifactId>messages</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<artifactId>cucumber-java</artifactId>
<groupId>io.cucumber</groupId>
<exclusions>
<exclusion>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-gherkin</artifactId>
</exclusion>
<exclusion>
<groupId>io.cucumber</groupId>
<artifactId>messages</artifactId>
</exclusion>
</exclusions>
<version>${cucumber.version}</version>
</dependency>

如果有人能帮助我,我真的很感激

依赖项不一致。您显式地排除了Cucumber的传递依赖项,并显式地包括了其他依赖项。你不应该这样做,黄瓜需要这些来发挥作用。

我强烈建议你花时间学习如何使用Maven(或Gradle),而不是肤浅的层次。了解这些工具和相关的概念可以使您的工作更轻松。

例如:

如果你想在JUnit 5和基于注释的步骤定义中使用Cucumber,你可以在Mavenpom.xml文件中声明这个最小的依赖集。

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.9.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-bom</artifactId>
<version>7.10.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit-platform-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

通过告诉Maven你的依赖项是什么,Maven可以计算出你的可传递依赖项,即:你的依赖项的依赖项。

这有很多优点。一个例子是使用mvn dependency:tree -Dverbose命令列出所有依赖项及其传递依赖项。

$ mvn dependency:tree -Dverbose
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------< cucumber:cucumber-java-skeleton >-------------------
[INFO] Building Cucumber-Java Skeleton 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ cucumber-java-skeleton ---
[INFO] cucumber:cucumber-java-skeleton:jar:0.0.1
[INFO] +- io.cucumber:cucumber-java:jar:7.10.1:test
[INFO] |  +- io.cucumber:cucumber-core:jar:7.10.1:test
[INFO] |  |  +- io.cucumber:cucumber-gherkin:jar:7.10.1:test
[INFO] |  |  |  - (io.cucumber:cucumber-plugin:jar:7.10.1:test - omitted for duplicate)
[INFO] |  |  +- io.cucumber:cucumber-gherkin-messages:jar:7.10.1:test
[INFO] |  |  |  +- io.cucumber:gherkin:jar:25.0.2:test
[INFO] |  |  |  |  - (io.cucumber:messages:jar:19.1.4:test - omitted for duplicate)
[INFO] |  |  |  - (io.cucumber:cucumber-gherkin:jar:7.10.1:test - omitted for duplicate)
[INFO] |  |  +- io.cucumber:messages:jar:19.1.4:test
[INFO] |  |  +- io.cucumber:tag-expressions:jar:4.1.0:test
[INFO] |  |  +- io.cucumber:cucumber-expressions:jar:16.1.1:test
[INFO] |  |  |  - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] |  |  +- io.cucumber:datatable:jar:7.10.1:test
[INFO] |  |  |  - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] |  |  +- io.cucumber:cucumber-plugin:jar:7.10.1:test
[INFO] |  |  |  - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] |  |  +- io.cucumber:docstring:jar:7.10.1:test
[INFO] |  |  |  - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] |  |  +- io.cucumber:html-formatter:jar:20.2.0:test
[INFO] |  |  |  - (io.cucumber:messages:jar:19.1.4:test - omitted for duplicate)
[INFO] |  |  +- io.cucumber:ci-environment:jar:9.1.0:test
[INFO] |  |  - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] |  - org.apiguardian:apiguardian-api:jar:1.1.2:test
[INFO] +- io.cucumber:cucumber-junit-platform-engine:jar:7.10.1:test
[INFO] |  +- (io.cucumber:cucumber-core:jar:7.10.1:test - omitted for duplicate)
[INFO] |  - org.junit.platform:junit-platform-engine:jar:1.9.1:test
[INFO] |     +- org.opentest4j:opentest4j:jar:1.2.0:test
[INFO] |     +- org.junit.platform:junit-platform-commons:jar:1.9.1:test
[INFO] |     |  - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] |     - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] +- org.junit.platform:junit-platform-suite:jar:1.9.1:test
[INFO] |  +- org.junit.platform:junit-platform-suite-api:jar:1.9.1:test
[INFO] |  |  +- (org.junit.platform:junit-platform-commons:jar:1.9.1:test - omitted for duplicate)
[INFO] |  |  - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] |  - org.junit.platform:junit-platform-suite-engine:jar:1.9.1:test
[INFO] |     +- (org.junit.platform:junit-platform-engine:jar:1.9.1:test - omitted for duplicate)
[INFO] |     +- (org.junit.platform:junit-platform-suite-api:jar:1.9.1:test - omitted for duplicate)
[INFO] |     +- (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] |     - org.junit.platform:junit-platform-suite-commons:jar:1.9.1:test
[INFO] |        +- org.junit.platform:junit-platform-launcher:jar:1.9.1:test
[INFO] |        |  +- (org.junit.platform:junit-platform-engine:jar:1.9.1:test - omitted for duplicate)
[INFO] |        |  - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] |        +- (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] |        +- (org.junit.platform:junit-platform-engine:jar:1.9.1:test - omitted for duplicate)
[INFO] |        - (org.junit.platform:junit-platform-suite-api:jar:1.9.1:test - omitted for duplicate)
[INFO] - org.junit.jupiter:junit-jupiter:jar:5.9.1:test
[INFO]    +- org.junit.jupiter:junit-jupiter-api:jar:5.9.1:test
[INFO]    |  +- (org.opentest4j:opentest4j:jar:1.2.0:test - omitted for duplicate)
[INFO]    |  +- (org.junit.platform:junit-platform-commons:jar:1.9.1:test - omitted for duplicate)
[INFO]    |  - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO]    +- org.junit.jupiter:junit-jupiter-params:jar:5.9.1:test
[INFO]    |  +- (org.junit.jupiter:junit-jupiter-api:jar:5.9.1:test - omitted for duplicate)
[INFO]    |  - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO]    - org.junit.jupiter:junit-jupiter-engine:jar:5.9.1:test
[INFO]       +- (org.junit.platform:junit-platform-engine:jar:1.9.1:test - omitted for duplicate)
[INFO]       +- (org.junit.jupiter:junit-jupiter-api:jar:5.9.1:test - omitted for duplicate)
[INFO]       - (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.933 s
[INFO] Finished at: 2022-12-28T16:33:23+01:00
[INFO] ------------------------------------------------------------------------

注意:如果你看到一个传递依赖项被列为"省略了duplicate"并且你已经将它包含在你的pom.xml中,这个包含是不需要的。Maven会帮你下载的。

如果你正在寻找一个新的开始,你也可以使用cucumber-java-skeleton来开始一个工作项目。

相关内容

最新更新