gpt4 book ai didi

java - 具有通用方法的 Mockito

转载 作者:行者123 更新时间:2023-11-30 02:17:50 26 4
gpt4 key购买 nike

我试图用 mockito 在我的类上模拟一个通用方法,但是当测试代码运行时,我总是得到一个 NullPointerException。

这是我要模拟的类。

public abstract class MyClass{
public abstract <T> T find(T t);
}

我的测试代码看起来像这样。

@Mock private MyClass myClass;

public testOnReceive(){
Mockito.when(
myClass.find(Mockito.isA(BroadcastReceiver.class))).
thenReturn(broadcastReceiver);

myReceiver.onReceive(context,intent);

}

最后我要测试的类是 BroadcastReceiver 类的扩展,这是我要测试的代码

public class MyReceiver extendes BroadcastReceiver{
public onReceive(Context context , Intent intent){
...
...
myClass.find(this);
}
}

问题出在类的模拟上。该类实际上被模拟了(它不是 null)但是当调用泛型方法时我得到一个 null。

有什么想法吗?

谢谢

最佳答案

这是一个适合您的解决方案,即使您有部分模拟(即对于某些方法,您希望调用真实方法,而有时您需要模拟):

public class AbstractMethodMocker implements Answer<Object> {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable
{
Answer<Object> answer;
if (isAbstract(invocation.getMethod().getModifiers()))
answer = RETURNS_DEFAULTS;
else
answer = CALLS_REAL_METHODS;
return answer.answer(invocation);
}
}

@Test
public void testOnReceive() {
MyClass clazz = mock(MyClass.class, new AbstractMethodMocker());
when(clazz.find(any(BroadcastReceiver.class)).thenReturn(broadcastReceiver);
myReceiver.onReceive(context, intent);
}

Here is a great blog其中讨论了使用 Mockito 框架处理抽象类(及其方法)的策略。

关于java - 具有通用方法的 Mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29007757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com