从 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.Strictness
的 mockito-core
版本。 mockito-core:1.10.19
不包含 class 因为 class 是在 Mockito 2.x 中添加的。因此,为了使用 MockitoExtension
,您至少需要使用 mockito-core
.
的版本 2.x
Mockito 文档没有明确说明这一点,但我怀疑你会为 mockito-core
和 mockito-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);
}
作为解决方法。
我正在将我的代码库从 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.Strictness
的 mockito-core
版本。 mockito-core:1.10.19
不包含 class 因为 class 是在 Mockito 2.x 中添加的。因此,为了使用 MockitoExtension
,您至少需要使用 mockito-core
.
Mockito 文档没有明确说明这一点,但我怀疑你会为 mockito-core
和 mockito-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);
}
作为解决方法。