mockito java.lang.NoSuchMethodError:框架结构()框架结构

qhhrdooz  于 2022-11-08  发布在  Java
关注(0)|答案(4)|浏览(288)

我遇到了一个奇怪的问题。基本上,当我正常运行我的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>
bsxbgnwa

bsxbgnwa1#

如果您移除PowerMock相依性,这个范例就可以运作。问题是所使用的Mockito和PowerMock版本彼此不相容。对于PowerMock 2.x,您至少需要Mockito 2.8.9+。PowerMock提供相容性清单,显示哪个版本的PowerMock与哪个版本的Mockito相容。请修正版本,使其彼此相容,您的范例就可以开始运作。

kx7yvsdv

kx7yvsdv2#

当我尝试将Mockito与Junit 5(@ExtendWith)一起使用时,也遇到了类似的问题

java.lang.NoSuchMethodError: org.mockito.Mockito.mockitoSession()Lorg/mockito/session/MockitoSessionBuilder;

这是因为类路径中存在两个版本的mockito(一个是mockito-all,另一个是mockito-core),通过传递依赖关系。在从POM中显式删除mockito-all依赖关系后,问题得到了解决。

@ExtendWith(MockitoExtension.class)
public class TodoBusinessImplWIthMockWithAnnotationTest {

   @Mock
   TodoService todoService;

   @Test
   public void usingMockito() {

    ......

   }

}
iecba09b

iecba09b3#

删除到pom.xmlmockito-all并使用mockito-core

<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <scope>test</scope>
</dependency>

你可以在你的测试调用中使用注解@ExtendWith(MockitoExtension.class)。在测试类中使用@InjectMocks来注入你需要测试的服务,这将允许@Mock进行他的依赖性调用。

yacmzcpb

yacmzcpb4#

如果您使用的是较新版本的SpringBoot,它可能随附了比3.12.4更高的Mockito版本,这可能会使您的powermock-api-mockito 2无法工作,因为在较新版本的Mockito中,org.mockito.Answers中的get()方法已被删除,它在3.12.4中已被弃用,并且powermock-api-mockito不适合在较新版本中工作。
作为一种解决方案,您可以降级Mockito版本,也可以使用Mockito的较新版本来模拟您的最终类或方法。
有一个关于此问题here的已打开票证。

相关问题