2011-12-23 33 views
24

Tôi cần kiểm tra trước/sau ngày trong một trường hợp kiểm tra nhất định. Tôi muốn sử dụng Hamcrest matchers nếu có thể.Trận đấu ngày Hamcrest

Có bất kỳ đối sánh nào cho Hamcrest (Java) để làm việc với Ngày không? Nếu vậy, gói/lớp nào tôi sẽ tìm thấy các hàm trùng khớp ngày cụ thể trong?

Trả lời

28

Đối sánh OrderingComparison::greaterThan sẽ hoạt động trên bất kỳ loại nào có thể so sánh được với chính nó (trong gói org.hamcrest.number, nhưng nó không thực sự là số cụ thể). Ngày là một loại như vậy.

+0

Cảm ơn. Có vẻ như họ đã loại bỏ các lớp học có lợi cho một phương pháp nhà máy tĩnh, mà làm cho một liên kết thực sự ổn định không thể, nhưng tôi đã cố định nó như xa như tôi có thể. –

+0

Đó là sự thật. Ngoài ra còn có các phần mở rộng cung cấp một số phương pháp dễ đọc hơn. Ví dụ: [Cirneco] (https://github.com/ozimov/cirneco) cung cấp đối sánh 'J7Matchers :: after' là bí danh cho' OrderingComparison :: greaterThan'. Theo quan điểm của tôi, _sematic_ luôn quan trọng trong thử nghiệm đơn vị, đó là lý do tại sao tôi thường thích cách tiếp cận fulent được cung cấp bởi Google Truth, nhưng đôi khi tôi phải xử lý với Hamcrest trong các dự án kế thừa. – JeanValjean

4

Có một số tiện ích mở rộng hamcrest nhất định có thể giảm bớt một số thử nghiệm liên quan đến ngày tháng. Vui lòng check here.

+0

Wow, đó là khá gọn gàng. –

3

Bạn có thể có một cái nhìn tại quẹt ngày mới sẽ được thêm vào hamcrest (Tôi không biết khi nào suy nghĩ):

Date matchers discussion/code changes on github

Sau khi xem nhanh có vẻ như sẽ có một mới gói org.hamcrest.date chứa:

  • IsAfter
  • IsBefore
  • IsSameDayOfTheMonth
  • IsSameDayOfTheWeek
  • IsSameDayOfTheYear
  • IsSameHour
  • IsSameInstant
  • IsSameMinute
  • IsSameMonth
  • IsSameSecond
  • IsSameYear
  • IsWithin
12

Có một thư viện của quẹt ngày hamcrest cung cấp bởi thư viện tại https://github.com/eXparity/hamcrest-date mà cũng có sẵn cho maven, ivy, vv tại

<dependency> 
    <groupId>org.exparity</groupId> 
    <artifactId>hamcrest-date</artifactId> 
    <version>1.1.0</version> 
</dependency> 

Nó hỗ trợ quẹt khác nhau cho những ngày để cho phép cấu trúc như

Date myBirthday = new Date(); 
MatcherAssert.assertThat(myBirthday, DateMatchers.after(Moments.today())); 

hoặc

Date myBirthday = new Date(); 
MatcherAssert.assertThat(myBirthday, DateMatchers.isToday()); 
0

Ngoài ra còn có Cirneco extension. Nó có một số đối sánh cụ thể Date cụ thể (ví dụ: monday()) và những người khác áp dụng cho các ngày vì việc triển khai Comparable (xem ví dụ between(), betweenInclusive()). Kế hoạch này cũng hỗ trợ Joda Time trong phiên bản JDK7 của thư viện và các lớp dựa trên ngày tháng mới trong phiên bản JDK8 (chủ yếu là LocalDate).

Bạn có thể làm khẳng định như:

final Date date = new Date(); 
assertThat(date, is(monday())); // JUnit style 
given(date).assertIs(monday()); // Cirneco style 

Bạn có thể sử dụng phụ thuộc sau đây cho một dự án JDK7 tuân thủ:

<dependency> 
    <groupId>it.ozimov</groupId> 
    <artifactId>java7-hamcrest-matchers</artifactId> 
    <version>0.7.0</version> 
</dependency> 

hoặc sau nếu bạn đang sử dụng JDK8

<dependency> 
    <groupId>it.ozimov</groupId> 
    <artifactId>java8-hamcrest-matchers</artifactId> 
    <version>0.7.0</version> 
</dependency> 
2

Công cụ so khớp Matchers#greaterThan hoạt động với Date s và các số khác Comparable đối tượng.

Dưới đây là cách để kiểm tra xem ngày của bạn là lớn hơn hoặc bằng (≥) đối với một số ngày dự kiến:

import static org.hamcrest.Matchers.equalTo; 
import static org.hamcrest.Matchers.greaterThan; 
import static org.hamcrest.core.AnyOf.anyOf; 
... 

Date expectedMin = new Date() 
// Execute the method being tested 
Date resultDate = getDate(); 
// Validate 
assertThat(resultDate, anyOf(greaterThan(expectedMin), equalTo(expectedMin))) 
Các vấn đề liên quan