从 Junit 4 到 Junit 5 的迁移问题

Migration issue from Junit 4 to Junit 5

我正在将我的代码库从 junit4 迁移到 junit5.I 在我的 testcase.Below 中使用了 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) 用于 运行 我的 mockito code.Replaced 与 @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..

谢谢 -山姆

JUnit5 MockitoExtension 使用 org.mockito.quality.Strictness,因此为了使用 MockitoExtension,您需要使用包含 org.mockito.quality.Strictnessmockito-core 版本。 mockito-core:1.10.19 不包含 class 因为 class 是在 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 的回复。根据您的输入,我能够找到正确的版本依赖关系,并解决了我的问题。以下是我用来解决相同问题的版本。

       <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 核心依赖项 internally.So 无需添加该依赖项。

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

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

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

作为解决方法。