是否可以使用莫科托(Mockito)返回时返回其他类型。
我的功能
m.findDocument(id)
返回基于id
的文档,我将其转换为字符串以进行进一步处理。但是,对于测试,我正在从ID文件中获取字符串。因此,有效地,我希望当函数称为如下:
when(m.findDocument(id)).thenReturn('that_string_from_id_file');
既然,一个是文档类型,另一种是字符串,我可以做同样的方法吗?
谢谢
事物是:使用模拟框架不会改变Java语言。
当方法的签名为 public Foo bar()
时 - 即使在模拟对象上调用bar()
时,该方法也必须返回foo的实例。您不能使用模仿来默默地更改方法的返回类型。
但是,当然,您可以做:
Document mockedDocument = mock(Document.class);
DocumentFinder mockedFinder = mock(DocumentFinder);
when(mockedFinder.findDocument(id)).thenReturn(mockedDocument);
when(mockedDocument.getSomeInfo()).thenReturn("that string");
但是请注意:如果您不能使用"真实"文档实例,则只需模拟该文档实例。您的目标应该是使用模拟而在不处理模拟的情况下是不可能的/太困难的地方。
no。根据您是在 theReturn或doreturn/doanswer时使用的,您要么会收到汇编错误或ClassCastException。
您可以做的是从该方法返回模拟文档,然后在模拟"转换"时返回测试字符串。