如何使用Mockito间谍重定向方法调用? [英] how to use mockito spy to redirect a method call?

查看:105
本文介绍了如何使用Mockito间谍重定向方法调用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个依靠现在"日期对象的方法.

我想为此编写一个单元测试.

所以我想注入一个假固定的现在"日期(使测试确定).

我试图注入这样的间谍:

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆