是否有替代returns_deep_stub的方法来用Mockito模拟链式方法?



我有一个允许方法链接的db服务save()方法:

@Service
public class Service {
...
    public Service save(...) {
        ...     
        return this;
    }

这个效果很好:

service.save(this).save(that).save(other);

当我用Mockito来模拟它的时候,它会中断,除非我使用

Service serviceMock = mock(Service.class, RETURNS_DEEP_STUBS); 

但是,使用returns_deep_stub被认为是不好的。有没有更好的方法来模拟一个类的方法调用链?

您的save模式非常类似于Builder模式,这使得问题类似于SO的其他地方的"如何使用mockito模拟构建器"。

根据David Wallace的回答,您可以编写一个Answer来检测mock是否是方法返回类型的实例,并仅在这种情况下返回mock。在Mockito 2.0中,这个功能也作为RETURNS_SELF被内置到Mockito库中。与任何答案一样,您可以在thenAnswer的任何特定方法调用上使用它,或者将其作为mock的第二个参数使其成为默认答案,但请记住Mockito文档警告,具有慷慨返回类型的方法(例如Object)将返回模拟,无论是否有意。

相关内容

  • 没有找到相关文章

最新更新