1

下面的测试方法出现在spring-guide 教程中。编写这个测试是否有一种不那么复杂的语法,或者我怎样才能把它分成更小的块?

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)))
    )));
4

2 回答 2

5

您可以切换 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)))
    )));
于 2013-10-22T20:33:40.690 回答
2

另一种方法是使用参数捕获器来记录您要验证的参数值。

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

这篇很棒的博客文章对此进行了更全面的解释:

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

于 2013-10-21T01:57:49.567 回答