我遇到了一个奇怪的问题。基本上,当我正常运行我的Mockito测试,即“作为Junit测试运行”时,它给了我下面的错误。有人能帮助我吗?我的错误是什么?
收到的错误:
java.lang.NoSuchMethodError: org.mockito.Mockito.framework()Lorg/mockito/MockitoFramework;
at org.powermock.api.mockito.mockmaker.MockMakerLoader.doLoad(MockMakerLoader.java:45)
at org.powermock.api.mockito.mockmaker.MockMakerLoader.load(MockMakerLoader.java:36)
at org.powermock.api.mockito.mockmaker.PowerMockMaker.<init>(PowerMockMaker.java:36)
... shortened stacktrace....
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
测试类:
public class ListTest {
@Test
public void letsMockListSize() {
List<?> list= mock(List.class);
when(list.size()).thenReturn(2);
assertEquals(2, list.size());
}
}
pom.xml文件
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.0-beta.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>2.0.0-beta.5</version>
<scope>test</scope>
</dependency>
4条答案
按热度按时间bsxbgnwa1#
如果您移除PowerMock相依性,这个范例就可以运作。问题是所使用的Mockito和PowerMock版本彼此不相容。对于PowerMock 2.x,您至少需要Mockito 2.8.9+。PowerMock提供相容性清单,显示哪个版本的PowerMock与哪个版本的Mockito相容。请修正版本,使其彼此相容,您的范例就可以开始运作。
kx7yvsdv2#
当我尝试将Mockito与Junit 5(@ExtendWith)一起使用时,也遇到了类似的问题
这是因为类路径中存在两个版本的mockito(一个是mockito-all,另一个是mockito-core),通过传递依赖关系。在从POM中显式删除mockito-all依赖关系后,问题得到了解决。
iecba09b3#
删除到pom.xmlmockito-all并使用mockito-core
你可以在你的测试调用中使用注解
@ExtendWith(MockitoExtension.class)
。在测试类中使用@InjectMocks
来注入你需要测试的服务,这将允许@Mock
进行他的依赖性调用。yacmzcpb4#
如果您使用的是较新版本的SpringBoot,它可能随附了比3.12.4更高的Mockito版本,这可能会使您的powermock-api-mockito 2无法工作,因为在较新版本的Mockito中,org.mockito.Answers中的get()方法已被删除,它在3.12.4中已被弃用,并且powermock-api-mockito不适合在较新版本中工作。
作为一种解决方案,您可以降级Mockito版本,也可以使用Mockito的较新版本来模拟您的最终类或方法。
有一个关于此问题here的已打开票证。