使用Maven

时间:2018-10-04 13:40:13

标签: java eclipse maven junit5

仅当项目的类路径中存在JUnit 5引擎时,Eclipse(2018-09)才支持JUnit 5测试。

现在我的Maven项目中有两种可能性:

  1. 通过Eclipse JUnit库将其添加到项目中

    JUnitLib

    并仅将API添加到依赖项中

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <scope>test</scope>
    </dependency>
    
  2. 将引擎和API都添加到我的Maven pom

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <scope>test</scope>
    </dependency>
    

如果我做前者,那么每个使用Eclipse的人都必须自己做。

如果稍后再做,则会使用实现类污染(测试)编译时类路径,而我(以及其他IDE的用户)可能会使用这些实现类路径来代替API类。同样,这可能会导致与IDE发生冲突,可能需要与cp上版本不同的引擎版本。 IIRC就是将API和引擎一分为二的全部原因。

不幸的是,Maven中没有testRuntimeOnly范围(就像gradle中那样)。

TLDR :哪种方法是为Maven项目的Eclipse配置JUnit 5的正确方法?

1 个答案:

答案 0 :(得分:1)

  

如果我做前者,那么每个使用Eclipse的人都必须自己做。

我假设您打算通过右键单击JUnit测试类并选择 Run as> JUnit Test ,让Eclipse用户有机会执行测试。我不知道这是否是正确的方法,但是要做到这一点,除了 JUnit Jupiter API / Engine JUnit Platform)之外,您还需要添加其他依赖项启动器

例如:

<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-api</artifactId>
  <version>5.4.2</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-engine</artifactId>
  <version>5.4.2</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.junit.platform</groupId>
  <artifactId>junit-platform-launcher</artifactId>
  <version>1.4.2</version>
  <scope>test</scope>
</dependency>

不知道它是否相关,但是我使用的是 maven-surefire-plugin 版本2.22.1,如果 JUnit Platform Launcher 是,则会抛出 ClassNotFoundException 丢失。