gpt4 book ai didi

elasticsearch - 如何使用 mockito 模拟构建器模式表达式

转载 作者:行者123 更新时间:2023-12-03 02:15:02 25 4
gpt4 key购买 nike

我有以下 Elasticsearch 代码

SearchRequestBuilder builder = client.prepareSearch(indexRange).setTypes(module).setSize(json.getPageSize())
.setFrom(json.getOffset()).setFetchSource(prepareFieldListToLoad(), prepareFieldListToIgnore())
.setExplain(false);
我如何使用 mockito 模拟它以进行 junit 测试?

最佳答案

从这个片段中不清楚 client被实例化。但是,发生这种情况时,您需要模拟该客户端对象。一旦你模拟了它,你就可以设置它的期望值,这样当它的 prepareSearch方法被调用,它返回一些东西——可能是另一个模拟。然后,您需要对 prepareSearch 返回的其他模拟设置期望值。打电话,等等。
由于链接,您最终将需要许多模拟:

  • 为客户模拟
  • prepareSearch 调用返回的对象的模拟
  • setTypes 调用返回的对象的模拟
  • setSize 调用返回的对象的模拟
  • setFrom 调用返回的对象的模拟
  • setFetchSource 调用返回的对象的模拟
  • setExplain 调用返回的对象的模拟

  • 您可以考虑为 prepareSearch 返回的对象使用 stub 。如果这些“设置”方法只是简单的 setter ,则调用。然后测试将调用对象的真正 setter ,但它仍然允许您模拟对象上更广泛的一些其他调用。
    或者,如果这听起来像手动设置太多,您可以使用 Mockito 的 RETURN_DEEP_STUBS:
    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/ 的深度 stub 示例
    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/
  • How to mock a builder with mockito
  • 关于elasticsearch - 如何使用 mockito 模拟构建器模式表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63772840/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com