2013-10-20 75 views
1

以下測試方法出現在spring-guide tutorial中。 有沒有一個不太複雜的語法來寫這個測試,或者我怎樣才能把它分解成更小的塊呢?如何在測試方法中簡化mockito/hamcrest參數匹配器?

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

你可以切換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))) 
    ))); 
2

另一種方法是使用參數捕獲器記錄您嘗試驗證的參數值。

然後,您可以在您認爲合適的值上對值執行斷言。這是驗證參數信息比使用匹配器更爲明確的方法。

這是在這個偉大的博客條目更全面地解釋:

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

+0

是的,當您發佈此信息時,我的回答只有一半。但是這個解決方案比我要寫的要好得多。 +1。 –

相關問題