基本上,我有以下几点:
public class Provider {
public Map<Enum, Object> get() {
return Map.of(Enum.ONE, ObjectOne,
Enum.Two, ObjectTwo);
}
}
Object value = provider.get().get(Enum.ONE);
我试着嘲笑这一点
when(provider.get().get(any())).thenReturn(ObjectOne);
但我犯了这个错误
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
Object cannot be returned by get()
get() should return Map
我不想模拟映射的返回,因为我只希望来自这个特定方法的映射返回ObjectOne
,而不是所有的映射。
你知道我是如何模仿提供者的吗。get()。获取(Enum.ONE)
以便它返回ObjectOne
?
Object value = provider.get().get(Enum.ONE);
when(provider.get().get(any())).thenReturn(ObjectOne);
我通过使用mockito搜索模拟嵌套方法调用找到了答案。
@Mock
private ObjectOne mockObjectOne;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Provider mockProvider;
when(mockProvider.get().get(any())).thenReturn(mockObjectOne);
感觉你处理问题的方式不对。ObjectOne是您似乎想要存根的对象,而不是映射本身
定义一个构造函数
public class Provider {
private ObjectOne one;
Provider(ObjectOne one) {
this.one = one;
}
public Map<Enum, Object> get() {
return Map.of(Enum.ONE, one,
Enum.Two, ObjectTwo);
}
}
使用一些测试,比如
ObjectOne oo = new ObjectOne();
Provider p = new Provider(oo);
assertSame(oo, p.get().get(Enum.ONE));
否则,您将需要存根整个方法
Map<Enum, Object> map = new HashMap<>();
map.put(Enum.ONE, "foobar");
Provider mock = mock(Provider.class);
when(mock.get()).thenReturn(map);
// obviously the remaining test is pointless because calling mock.get() returns exactly what you already have
如何模拟返回已强制转换的模拟对象的方法。 试验方法。
问题内容: 我正在为我的应用程序编写单元测试,我想知道Mockito框架是否有可能影响传递到返回无效类的方法中的对象。例如,调用一个包含方法的模拟验证类,该方法返回void,但通过作为参数传入的对象来跟踪各种更改和元数据。。 我为其他测试模拟了验证器类,但是对于这个测试,我需要模拟对不知道怎么做的cartItemsFilter对象的更改。 问题答案: 答案是肯定的,您可以,并且根据测试的需要,基本
问题内容: 我想模拟下一行: 这里的问题是newBigQueryClient方法返回的Bulder类是最终的。这意味着我既不能使用嘲讽也不可以使用powermockito来模拟它(它返回这样的异常:不能对最终类进行子类化),但是我需要返回适合于模拟它的构建方法的东西。有什么想法怎么做? 问题答案: 改善代码并使其更具可测试性的建议: 首先,您不会像您给我们的示例那样模拟 声明 。您可以模拟 对象
问题内容: 我使用PowerMock 1.4.7和JUnit 4.8.2 我只需要模拟一些静态方法,而我想让其他方法(来自同一类)只是返回原始值。当我嘲笑并且不调用所有静态方法时,它们会返回其默认值- 例如,返回Object时为null或返回布尔值时为false …等等。因此,我尝试在每个静态方法上显式使用它 来返回默认实现(意味着没有模拟/没有伪造),但是我不知道如何在每个可能的参数变体上调用它
我有一个类,它有以下实现: 如您所见,方法调用,然后在返回结果之前执行一些逻辑。 当我试图模拟这个存储库进行单元测试时,我很难从中获得结果,因为它总是作为空引用异常而失败。 以下是单元测试: 如何使此测试工作,使模拟方法在调用被模拟的方法之后执行一些逻辑?
我对Mockito很陌生。我想为下面的方法编写一个mock。我该怎么写?我的模拟方法会是什么样子?