除非我 运行 mvn update,否则为什么 Maven 测试在 mvn clean 之后不起作用?

Why does Maven test not work after mvn clean unless I run mvn update?

我正在 运行使用 restassured 和 cucumber 进行一些服务测试,它们仅使用 Maven 测试就可以在本地正常工作。

问题是,如果我 运行 Maven 干净了,那么我必须 运行 Maven 更新,否则它将无法工作(说它找不到我的 Cucumber 功能文件)。作为参考,它说:

No features found at [classpath:classpath/classpath]

这不会是一个大问题,除非我需要通过 Bamboo 进行此 运行ning,而我无法调用 Maven 更新。

所以我要么需要弄清楚我的 POM 有什么问题开始导致这个问题,要么我如何 运行 Maven 通过 goals/environment 变量更新。

POM 相当简单,只有需要的 dependencies/reporting 东西。 POM的构建部分如下:

<build>
    <finalName>Test</finalName>
    <directory>target</directory>
    <outputDirectory>target/classes</outputDirectory>
    <testOutputDirectory>target/test-classes</testOutputDirectory>
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <resources>
        <resource>
            <directory>src/test/resources</directory>
        </resource>
    </resources>
</build>

这一切都在 Java 8 中,使用 Eclipse 作为 IDE。

看起来在黄瓜选项中定义 features/glue 解决了这个问题。 不过我相信还有更好的选择。

我添加了以下黄瓜选项:

    features ="src/test/java",
    glue = "packagename",

我会避免在 pom 的构建部分指定任何内容,而是使用默认值。

也就是说,我会将我的功能文件保存在与 运行ner 或子包相同的包中。

运行 人可以住在包里 se/thinkcode/tage 如在目录中:

./test/java/se/thinkcode/tage

这意味着功能文件应位于目录中:

./test/resources/se/thinkcode/tage

这将允许我最小化 运行ner 中的配置。我通常使用如下所示的 运行ners:

package se.thinkcode.tage;

import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
public class RunCukesTest {
}

如果您想 运行 使用来自 Maven 的 JUnit 的 Cucumber,这是可能的最小配置。

Cucumber 团队提供的示例更小:https://github.com/cucumber/cucumber-java-skeleton