如何使用Mockito间谍重定向方法调用? [英] how to use mockito spy to redirect a method call?
问题描述
我有一个依靠现在"日期对象的方法.
我想为此编写一个单元测试.
所以我想注入一个假固定的现在"日期(使测试确定).
我试图注入这样的间谍:
private ImagesSorter setServerWithSpyImageSorter(用户,列表imagesAsInsertionOrder,日期fakeNowDate)引发IOException {ImagesSorter imagesSorter = spy(new ImagesSorter());when(imagesSorter.sortImages(imagesAsInsertionOrder,user)).thenReturn(imagesSorter.sortImages(imagesAsInsertionOrder,user,fakeNowDate));//doReturn(imagesSorter.sortImages(imagesAsInsertionOrder,user,fakeNowDate)).when(imagesSorter).sortImages(imagesAsInsertionOrder,user);服务器= VenueServerImplBuilder.create().withImagesSorter(imagesSorter).build();server.init();返回imagesSorter;}
但它不起作用.
1)当我使用 doReturn(imagesSorter.sortIm ..
2)当我注释掉 doReturn(..
)并使用 when(imagesSorter.sor
我遇到以下错误:
org.mockito.exceptions.misusing.UnfinishedStubbingException:在此处检测到未完成的存根:例如.thenReturn()可能会丢失.正确存根的示例:when(mock.isOk()).thenReturn(true);when(mock.isOk()).thenThrow(exception);doThrow(exception).when(mock).someVoidMethod();提示:1.缺少thenReturn()2.您正在顽固开发人员,这是您的顽皮开发人员!
您将如何编码我想做什么?
此语法不适用于间谍:
when(imagesSorter.sortImages(imagesAsInsertionOrder,user)).thenReturn(imagesSorter.sortImages(imagesAsInsertionOrder,user,fakeNowDate));
您需要使用此构造:
doReturn(imagesSorter.sortImages(imagesAsInsertionOrder,user,fakeNowDate)).when(imagesSorter).sortImages(imagesAsInsertionOrder,user));
以下是相关文档(请参阅监视真实对象的重要提示!"部分): http://static.javadoc.io/org.mockito/mockito-core/2.8.47/org/mockito/Mockito.html#13
I have a method that relies on "now" Date object.
I want to write a unit-test for it.
So I want to inject a fake-fixed "now" date (making the test determine).
I have tried to inject a spy like this:
private ImagesSorter setServerWithSpyImageSorter(User user, List imagesAsInsertionOrder, Date fakeNowDate) throws IOException {
ImagesSorter imagesSorter = spy(new ImagesSorter());
when(imagesSorter.sortImages(imagesAsInsertionOrder, user)).thenReturn(imagesSorter.sortImages(imagesAsInsertionOrder, user, fakeNowDate));
//doReturn(imagesSorter.sortImages(imagesAsInsertionOrder, user, fakeNowDate)).when(imagesSorter).sortImages(imagesAsInsertionOrder, user);
server = VenueServerImplBuilder.create().withImagesSorter(imagesSorter).build();
server.init();
return imagesSorter;
}
but it doesn't work.
1) when I used doReturn(imagesSorter.sortIm..
it was eagerly evaluated. I didn't want that to happen. Can I avoid this?
2) when I commented out the doReturn(..
and used when(imagesSorter.sor
I got the following error:
org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
E.g. thenReturn() may be missing.
Examples of correct stubbing:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();
Hints:
1. missing thenReturn()
2. you are trying to stub a final method, you naughty developer!
how would you code what I want to do?
This syntax doesn't work for spies:
when(imagesSorter.sortImages(imagesAsInsertionOrder, user)).thenReturn(imagesSorter.sortImages(imagesAsInsertionOrder, user, fakeNowDate));
You need to use this construct:
doReturn(imagesSorter.sortImages(imagesAsInsertionOrder, user, fakeNowDate)).when(imagesSorter).sortImages(imagesAsInsertionOrder, user));
Here is relevant documentation (see section "Important gotcha on spying real objects!"): http://static.javadoc.io/org.mockito/mockito-core/2.8.47/org/mockito/Mockito.html#13
这篇关于如何使用Mockito间谍重定向方法调用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!