Maven + AssertJ + IntelliJ =与范围混淆?

时间:2016-10-03 12:16:50

标签: java maven intellij-idea assertj

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

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

我的问题是范围"测试"没有得到足够的解释。使用该范围,我甚至无法导入必要的AsserJ文件。 当我尝试"导入静态org.assertj.core.api.Assertions。*;"时,导入无法识别,并且表示断言无法解析。

任何可能有帮助的建议?

2 个答案:

答案 0 :(得分:2)

您的代码的结构是什么?

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

“测试”范围导入仅适用于src / test / java

下的类的库

答案 1 :(得分:1)

accepted Answer是正确的,但缺少详细信息。

Maven

在您的POM的dependencies元素中为AssertJ添加 <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.11.1</version> <scope>test</scope> </dependency> 元素。

<scope>test</scope>

删除scope

如果您要在常规应用程序类中的测试类之外使用AssertJ断言,请注意scope元素。 {@ 3}}在AssertJ问题跟踪器中解决了该主题。

当Maven依赖项带有值为test的{​​{1}}元素时,这意味着您不能在特定于测试的源程序包/文件夹之外使用该库。

如果您尝试从示例项目的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需要Java 8或更高版本。

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

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