【问题标题】:Migration issue from Junit 4 to Junit 5从 Junit 4 迁移到 Junit 5 的问题
【发布时间】:2018-09-27 11:24:14
【问题描述】:

我正在将我的代码库从 junit4 迁移到 junit5。我在我的测试用例中使用了 mockito。下面是我用于依赖项的不同版本。

<junit.jupiter.version>5.2.0</junit.jupiter.version>
<junit.platform.version>1.2.0</junit.platform.version>
<org.mockito.version>1.10.19</org.mockito.version>

   <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>2.19.0</version>
        <scope>test</scope>
    </dependency>

我已经使用注释@RunWith(MockitoJUnitRunner.class) 来运行我的模拟代码。将其替换为@ExtendWith(MockitoExtension.class)

但是当我运行测试用例时,我得到以下错误。任何解决此问题的建议。我怀疑是否存在导致此问题的任何依赖版本问题。

java.lang.NoClassDefFoundError: org/mockito/quality/Strictness
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
at java.lang.Class.getDeclaredConstructor(Class.java:2178)
at..

谢谢 -山姆

【问题讨论】:

    标签: junit mockito junit4 junit5


    【解决方案1】:

    JUnit5 MockitoExtension 使用org.mockito.quality.Strictness,因此为了使用MockitoExtension,您需要使用包含org.mockito.quality.Strictnessmockito-core 版本。 mockito-core:1.10.19 不包含该类,因为该类是在 Mockito 2.x 中添加的。因此,要使用 MockitoExtension,您至少需要使用 mockito-core 的 2.x 版本。

    Mockito 文档没有明确说明这一点,但我怀疑您会为 mockito-coremockito-junit-jupiter 使用相同的 Mockito 版本。

    以下依赖项将允许您成功使用 JUnit5 MockitoExtension

    <org.mockito.version>2.19.0</org.mockito.version>
    
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${org.mockito.version}</version>
        <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>${org.mockito.version}</version>
        <scope>test</scope>
    </dependency>
    

    【讨论】:

    • 感谢@glytching 的回复。它帮助我解决了我的问题。
    【解决方案2】:

    我尝试对 mockito-junit-jupiter 和 mockito-core 使用相同的版本,但失败了。

    最后我自己在@BeforeEach 块中初始化了模拟。

    @BeforeEach
    private void setup() {
        MockitoAnnotations.initMocks(this);
    }
    

    作为一种解决方法。

    【讨论】:

      【解决方案3】:

      感谢@glytching 的回复。通过您的输入,我能够为我找到正确的版本依赖关系,它解决了我的问题。以下是我用来解决相同问题的版本。

             <dependency>
                  <groupId>org.junit.jupiter</groupId>
                  <artifactId>junit-jupiter-engine</artifactId>
                  <version>5.3.1</version>
                  <scope>test</scope>
              </dependency>
              <dependency>
                  <groupId>org.junit.platform</groupId>
                  <artifactId>junit-platform-runner</artifactId>
                  <version>1.3.1</version>
                  <scope>test</scope>
              </dependency>
      
              <dependency>
                  <groupId>org.mockito</groupId>
                  <artifactId>mockito-junit-jupiter</artifactId>
                  <version>2.22.0</version>
                  <scope>test</scope>
              </dependency>
      

      我还需要 mockito-core => 2.22.0 版。但是上面提到的 mockito-junit-jupiter 内部自带了 mockito 核心依赖,所以不需要添加那个依赖。

      【讨论】:

      • 你确定吗?我尝试了这些版本,但对我来说它不起作用。我必须添加@glytching 的答案中指定的依赖项。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 2018-04-03
      • 2013-08-07
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      相关资源
      最近更新 更多