`
dengqunhua
  • 浏览: 12116 次
社区版块
存档分类
最新评论

org.mockito.exceptions.misusing.MissingMethodInvocationException

阅读更多

powermock 常遇到的问题之一,

如果你需要mock一个静态方法,可能你会发现抛出如下异常

org.mockito.exceptions.misusing.MissingMethodInvocationException: 

when() requires an argument which has to be 'a method call on a mock'.

For example:

    when(mock.getArticles()).thenReturn(articles);

 

Also, this error might show up because:

1. you stub either of: final/private/equals()/hashCode() methods.

   Those methods *cannot* be stubbed/verified.

   Mocking methods declared on non-public parent classes is not supported.

2. inside when() you don't call method on mock but on some other object.

 

at org.powermock.api.mockito.PowerMockito.when(PowerMockito.java:495)

at schedule.PowerMockTest.test(PowerMockTest.java:18)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:497)

at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)

at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:310)

at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89)

at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97)

at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294)

at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127)

at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)

at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282)

at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87)

at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50)

at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207)

at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146)

at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120)

at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)

at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)

at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:122)

at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:106)

at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)

at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

 

这是我的示例:

 

import org.junit.Test;

import org.junit.runner.RunWith;

import org.powermock.api.mockito.PowerMockito;

import org.powermock.core.classloader.annotations.PrepareForTest;

import org.powermock.modules.junit4.PowerMockRunner;

 

import com.util.StaticClass;

 

@RunWith(PowerMockRunner.class)

@PrepareForTest({StaticClass.class})

public class PowerMockTest {

 

@Test

public void test(){

PowerMockito.mock(StaticClass.class);

PowerMockito.when(StaticClass.count()).thenReturn(-8);

}

 

}

 

出现以上问题的就是第二块红色部分,当你mock静态方法的时候,静态方法所在的类你需要换成

PowerMockito.mockStatic(StaticClass.class);

这样上面的这个异常就解决了,前提条件是得加上@PrepareForTest({StaticClass.class}),如果没有@PrepareForTest({StaticClass.class})也会出现上面这种异常

PowerMockito.mock 这个方法是mock一个对象出来的,我们经常需要调用private,final,构造函数这种的时候我们就用PowerMockito.mock

 

 

 

分享到:
评论

相关推荐

    mockito-core-4.0.0-API文档-中英对照版.zip

    Maven坐标:org.mockito:mockito-core:4.0.0; 标签:core、mockito、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    mockito-core-3.1.0-API文档-中英对照版.zip

    Maven坐标:org.mockito:mockito-core:3.1.0; 标签:mockito、core、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    mockito-core-2.15.0-API文档-中文版.zip

    Maven坐标:org.mockito:mockito-core:2.15.0; 标签:core、mockito、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...

    mockito-junit-jupiter-3.3.3.jar中文-英文对照文档.zip

    注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 ...

    springboot + mockito 使用示例代码-原创

    import static org.mockito.Mockito.*; import static org.junit.jupiter.api.Assertions.*; class UserServiceTest { @InjectMocks private UserService userService; @Mock private UserRepository ...

    mockito-core-4.0.0-API文档-中文版.zip

    Maven坐标:org.mockito:mockito-core:4.0.0; 标签:core、mockito、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...

    org.springframework.test-3.0.2.RELEASE.jar

    3. **Mockito与Spring集成**:Spring测试模块可以与Mockito等模拟框架集成,方便进行行为驱动开发(BDD)和单元测试。 4. **SpringJUnit4ClassRunner**与**SpringRunner**:这些测试运行器使得JUnit测试类可以利用...

    powermock-api-mockito-common-1.6.6.jar

    java运行依赖jar包

    spring集成TestNG与Mockito框架单元测试方法

    import org.mockito.junit.jupiter.MockitoExtension; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @ExtendWith(MockitoExtension.class) public...

    springboot整合junit测试用例demo

    import static org.mockito.Mockito.when; @SpringBootTest class UserServiceTest { @InjectMocks private UserService userService; @Mock private UserRepository userRepository; @BeforeEach void ...

    mockito-core-3.8.0-API文档-中文版.zip

    Maven坐标:org.mockito:mockito-core:3.8.0; 标签:mockito、core、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...

    mockito-core-3.9.0-API文档-中文版.zip

    Maven坐标:org.mockito:mockito-core:3.9.0; 标签:mockito、core、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...

    Practical-Unit-Testing-with-TestNG-and-Mockito_examples

    import org.mockito.junit.MockitoJUnitRunner; import org.testng.Assert; import org.testng.annotations.Test; @RunWith(MockitoJUnitRunner.class) public class DependencyInjectionTest { @Mock private ...

    mockito-core-3.8.0-API文档-中英对照版.zip

    Maven坐标:org.mockito:mockito-core:3.8.0; 标签:mockito、core、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    mockito-jar.zip

    mockito-all-1.10.19.jar mockito-core-4.5.1.jar mockito-junit-jupiter-4.5.1.jar mockito-junit-jupiter-4.5.1-sources.jar

    mockito-core-2.15.0-API文档-中英对照版.zip

    Maven坐标:org.mockito:mockito-core:2.15.0; 标签:core、mockito、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...

    mockito-core-3.1.0-API文档-中文版.zip

    Maven坐标:org.mockito:mockito-core:3.1.0; 标签:mockito、core、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...

    SpringBoot 多模块Dao层单元测试

    import static org.mockito.Mockito.*; public class UserDaoTest { @Mock private JdbcTemplate jdbcTemplate; @InjectMocks private UserDao userDao; @BeforeEach public void setUp() { ...

    Mockito常用方法.pdf

    import static org.mockito.Mockito.*; import static org.junit.Assert.*; ``` 验证行为 Mockito 提供了一个 `verify` 方法来验证对象的行为是否发生。例如: ```java @Test public void verify_behaviour() { //...

Global site tag (gtag.js) - Google Analytics