Maven + AssertJ + IntelliJ = 范围混淆?

Maven + AssertJ + IntelliJ = confusion with scope?

我想在我当前的 IntelliJ maven 项目中添加一个测试框架。

我选择 AsserJ,因为它的风格最适合我。我尝试了他们的教程,但未能提供足够的帮助。 (http://joel-costigliola.github.io/assertj/assertj-core-quick-start.html)

我的问题是范围 "test" 解释得不够好。在那个范围内,我什至无法导入必要的 AsserJ 文件。 当我尝试 "import static org.assertj.core.api.Assertions.*;" 时,无法识别导入,它说无法解析断言。

有什么建议可以帮助吗?

你的代码结构是什么?

https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html 可能会有帮助。

"Test" 范围导入仅供 类 使用的库,这些库位于 src/test/java

正确,但缺少细节。

行家

在 POM 的 dependencies 元素中为 AssertJ 添加 dependency 元素。

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.11.1</version>
        <scope>test</scope>
    </dependency>

删除<scope>test</scope>

如果您尝试在常规应用程序 类 中使用测试 类 之外的 AssertJ 断言,请注意 scope 元素。该主题已在 AssertJ 问题跟踪器的 中得到解决。

当 Maven 依赖项带有值为 testscope 元素时,这意味着您不能在测试特定源 package/folder 之外使用该库。

如果您尝试从示例项目的 src/main/java/… 文件夹层次结构中的代码调用 AssertJ,您将看到该错误。如果您从 src/test/java… 调用 AssertJ,您将看到成功。

要在 src/main/java/… 文件夹层次结构中启用 AssertJ,请删除 POM 依赖项中的 scope 元素。所以这个:

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.11.1</version>
        <scope>test</scope>
    </dependency>

…变成这样:

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.11.1</version>
    </dependency>

Java 需要 8 个

AssertJ 3 需要 Java8 或更高版本。

验证编译器使用的 Java 版本。在 Maven 中验证这对元素:

    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>