猿问

java.lang.NoSuchMethodError: org.mockito.Mockito.

我一直面临一个特殊的问题。基本上,当我正常运行我的 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>


隔江千里
浏览 954回答 4
4回答

慕容3067478

如果您使用的是较新版本的 SpringBoot,它可能带有大于 3.12.4 的 Mockito 版本,这可能会使您的 powermock-api-mockito2 无法工作,因为在较新版本的 Mockito 中,org.mockito 中的 get() 方法.Answers 已被删除,它已在 3.12.4 中弃用,并且 powermock-api-mockito 不适用于新版本。作为一种解决方案,您可以降级 Mockito 版本,或者您可以使用更新版本的 Mockito 来模拟您的最终类或方法。

慕神8447489

如果您删除 PowerMock 依赖项,该示例将起作用。问题是所使用的 Mockito 和 PowerMock 的版本彼此不兼容。对于 PowerMock 2.x,您至少需要 Mockito 2.8.9+。PowerMock 提供了一个兼容性列表,显示了哪个版本的 PowerMock 与哪个版本的 Mockito 兼容。修复版本以相互兼容,您的示例将开始工作。

茅侃侃

当我尝试将 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 {&nbsp; &nbsp;@Mock&nbsp; &nbsp;TodoService todoService;&nbsp; &nbsp;@Test&nbsp; &nbsp;public void usingMockito() {&nbsp; &nbsp; ......&nbsp; &nbsp;}}

白板的微信

删除到您的 pom.xml mockito-all 并使用 mockito-core<dependency>&nbsp; <groupId>org.mockito</groupId>&nbsp; <artifactId>mockito-core</artifactId>&nbsp; <scope>test</scope></dependency>@ExtendWith(MockitoExtension.class)您可以在测试调用中使用注释 。在测试类中用于 @InjectMocks注入您需要测试的服务,这将允许@Mock他的依赖调用。
随时随地看视频慕课网APP

相关分类

Java
我要回答