如何在测试方法中简化mockito / hamcrest参数匹配器?

时间:2013-10-20 20:18:23

标签: java spring unit-testing mockito hamcrest

以下测试方法显示在spring-guide tutorial中。 是否有一个较少复杂的语法来编写这个测试,或者我如何将它分成更小的块呢?

verify(orderService).createOrder(
      org.mockito.Matchers.<CreateOrderEvent>argThat(
        allOf( org.hamcrest.Matchers.<CreateOrderEvent>
            hasProperty("details",
                hasProperty("dateTimeOfSubmission", notNullValue())),

        org.hamcrest.Matchers.<CreateOrderEvent>hasProperty("details",
                hasProperty("name", equalTo(CUSTOMER_NAME))),

        org.hamcrest.Matchers.<CreateOrderEvent>hasProperty("details",
                hasProperty("address1", equalTo(ADDRESS1))),
        org.hamcrest.Matchers.<CreateOrderEvent>hasProperty("details",
                hasProperty("postcode", equalTo(POST_CODE)))
    )));

2 个答案:

答案 0 :(得分:4)

您可以切换hasProperty和allOf匹配器。

verify(orderService).createOrder(
      org.mockito.Matchers.<CreateOrderEvent>argThat(
        org.hamcrest.Matchers.<CreateOrderEvent>hasProperty("details",
          allOf(
            hasProperty("dateTimeOfSubmission", notNullValue()),
            hasProperty("name", equalTo(CUSTOMER_NAME)),
            hasProperty("address1", equalTo(ADDRESS1)),
            hasProperty("postcode", equalTo(POST_CODE)))
    )));

答案 1 :(得分:2)

另一种方法是使用参数captor来记录您尝试验证的参数值。

然后,您可以根据需要对值执行断言。这是一种更清晰的方法来验证参数信息是预期的比使用匹配器。

这篇博文中有更详细的解释:

http://www.planetgeek.ch/2011/11/25/mockito-argumentmatcher-vs-argumentcaptor/