如何使用mockito模拟生成器模式表达式

dgenwo3n  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(324)

我有下面的搜索码

SearchRequestBuilder builder = client.prepareSearch(indexRange).setTypes(module).setSize(json.getPageSize())
    .setFrom(json.getOffset()).setFetchSource(prepareFieldListToLoad(), prepareFieldListToIgnore())
    .setExplain(false);

如何使用mockito模拟junit测试?

dw1jzc5e

dw1jzc5e1#

从这个片段中还不清楚 client 被示例化。不管发生什么情况,您都需要模拟该客户机对象。一旦你嘲笑了它,你就可以对它设定期望值,这样当它 prepareSearch 方法时,它会返回一些东西——可能是另一个模拟。然后您需要对 prepareSearch 打电话,等等。
由于链接,您最终将需要许多模拟:
对客户的嘲弄
preparesearch调用返回的对象的模拟
settypes调用返回的对象的模拟
setsize调用返回的对象的模拟
setfrom调用返回的对象的模拟
setfetchsource调用返回的对象的模拟
setexplain调用返回的对象的模拟
您可以考虑对 prepareSearch 如果那些“set”方法只是简单的setter,则调用。然后测试将调用对象的真正setter,但它仍然允许您模拟对对象的其他更广泛的调用。
或者,如果这听起来像是太多的手动设置,您可以使用mockito的return\u deep\u存根:https://www.javadoc.io/doc/org.mockito/mockito-core/2.6.9/org/mockito/answers.html
深树桩示例:https://idodevjobs.wordpress.com/2015/04/09/mockito-deep-stubs-example/

public class MockingMethodChains {

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private Foo foo;

    @Test
    public void easyWayToMockMethodChaining(){
        when(foo.getBar().getName()).thenReturn("Foo Bar");
        assertEquals("Foo Bar", foo.getBar().getName());
    }
}

其他来源:
http://jakegoulding.com/blog/2012/01/09/stubbing-builder-pattern-in-mockito/
如何用mockito模仿建设者

相关问题