2017-02-17 57 views
0

我想用日期編寫針對搜索的測試。我喜歡斷言在日期比較中的用法

assertThat(repository.findByBookingDateAfter(LocalDate.of(2016, 1, 1))).extracting("bookingDate").are(...)); 

其中類結構是類似以下內容思考的測試代碼的東西:

public class Booking{ 
    ... 
    LocalDate bookingDate; 
    ... 
} 

因爲查詢是在給定日期之後的任何預訂,我的測試應檢查領域確實比日期晚。經過一些在線搜索後,我沒有看到任何有用的信息。我想知道我是否在正確的軌道上。

有什麼建議嗎?

更新:

後來,我改變依賴安裝在的build.gradle文件如下:

testCompile('org.springframework.boot:spring-boot-starter-test'){ 
    exclude group: 'org.assertj' 
} 
testCompile group: 'org.assertj', name: 'assertj-core', version: '3.6.2' 

擁有最新版本assertj的。

更新2:

以下是從開始 「是」 的任何方法的屏幕截圖。 「isAfter」不在列表中。

enter image description here

+1

請問你可以用更多的**代碼**來擴展你的例子,並描述你想要測試的內容*,你期望的**和你已經**過的** **? 根據您使用的** date api **(我在您的示例中看到一個LocalDate),您可能需要查看[Joda-Time Assertion]的文檔(https://joel-costigliola.github .io/assertj/assertj-joda-time.html)或[Java 8日期和時間API的代碼示例](https://github.com/joel-costigliola/assertj-examples/blob/master/assertions-examples /src/test/java/org/assertj/examples/Java8DateTimeAssertionsExamples.java)。 – Riggs

+0

謝謝。我在我的問題中添加更多細節。 – vic

回答

0

我會用allMatchallSatisfy斷言檢查每一個提取的日期是在查詢中使用一前一後。

// set the extracted type to chain LocalDate assertion 
assertThat(result).extracting("bookingDate", LocalDate.class) 
        .allMatch(localDate -> localDate.isAfter(queryDate))); 

// use a lambda to extract the LocalDate to chain LocalDate assertion 
assertThat(result).extracting(Booking::getBookingDate) 
        .allSatisfy(localDate -> assertThat(localDate).isAfter(queryDate)); 

你得到第二斷言更好的錯誤消息,它會顯示錯誤的日期。

+0

allMatch和allSatisfy是assertj的一部分嗎?我無法在我的項目中找到它們。此外,localDate - > assertThat(localDate)代碼也無法傳遞編譯器。 – vic

+0

它們在3.6.2中,請參閱http://joel-costigliola.github.io/assertj/core-8/api/org/assertj/core/api/AbstractIterableAssert.html#method.summary –

+0

替換爲版本後,我可以看到allMatch和allSatisfy,但不是之後。我掃描了所有可用的方法,但無法找到合適的方法。 – vic