问题描述
请帮助。
@H_404_5@@Override public Object invoke(Object o,Method method,Object[] objects) throws Throwable { ... final Object toReturn = method.invoke(this.impl,objects); ... }
我有测试班
@H_404_5@@Test public void @R_404_4876@ throws Throwable { try { APIController apiController = new APIController(paramMock1,new Gson()); Method method = apiController.getClass().getmethod("ping"); methodMock = Mockito.mock(method.getClass()); **---> Fail** Mockito.donothing().when(methodMock).invoke(Mockito.anyObject(),Mockito.any()); proxy.invoke(new Object(),method,new Object[]{}); } catch (Exception ex) { Assert.assertTrue(ex instanceof NullPointerException); } }
错误消息是
@H_404_5@Cannot mock/spy class java.lang.reflect.Method Mockito cannot mock/spy following: - final classes - anonymous classes - primitive types`
我做了一些研究并添加了
@H_404_5@@RunWith(powermockrunner.class)
在测试类之上,但仍然出现错误。
如何使用该方法的模拟进行测试?谢谢。
解决方法
PowerMock和Mockito是不同的模拟框架,因此仅添加@RunWith(PowerMockRunner.class)
注释将无法解决您的问题。 Powermock 可以有用(我不太熟悉,所以在这里不确定),但是您需要重写测试以使用它而不是模仿。
但是从我看来,您很可能不需要模拟Method
类-对于您的任务,只需模拟要模拟的 object 就足够了方法。像这样:
APIController apiController = mock(APIController.class);
doNothing().when(apiController).ping(...);
// pass the mocked apiController to your proxy;
// test that proxy.invoke calls the ping method