2012-03-15 20 views
9

Đến với Java từ Python. Tôi nhận ra điều này là khá cơ bản, nhưng có vẻ như điều này chưa được yêu cầu ở đây và Google đang bị lôi cuốn với tôi.Trong thử nghiệm đơn vị Java, làm cách nào để khẳng định một số nằm trong một phạm vi nhất định?

Trong Python, tôi chỉ đơn giản muốn làm một cái gì đó như thế này nhưng các đối tượng Java:

assertTrue(min <= mynum and mynum <= max); 
+0

Bởi vì 'and' không phải là một từ khóa Java. Bạn muốn '&&'. –

+1

Ah, vâng. 'import static org.junit.Assert.assertTrue' cũng đã giúp. Cảm ơn tất cả! – klenwell

Trả lời

13

Tôi muốn viết:

assertTrue("mynum is out of range: " + mynum, min <= mynum && mynum <= max); 

nhưng về mặt kỹ thuật bạn chỉ cần:

assertTrue(min <= mynum && mynum <= max); 

Dù bằng cách nào, hãy chắc chắn để viết && và không and.

1

assertTrue(min <= mynum && mynum <= max, "not in range");

bình luận ở cuối là bắt buộc. Về cơ bản giống như phiên bản python, ngoại trừ &&.

1

Sử dụng && thay vì and; khác hơn thế, những gì bạn viết nên hoạt động.

3

bạn cũng có thể sử dụng thư viện Hamcrest, điều này dễ đọc hơn.

assertThat(mynum,greaterThanOrEqualTo(min)); 

assertThat(mynum,lessThanOrEqualTo(max)); 

Tôi không biết liệu hai dòng đó có thể được hợp nhất hay không.

2

Mở rộng trên this câu trả lời: bạn có thể kết hợp hai với allOf.

assertThat(mynum, allOf(greaterThanOrEqualTo(min),lessThanOrEqualTo(max))); 

Tương đương OR trong Hamcrest là anyOf.

1

Nếu bạn sử dụng AssertJ nó trở nên thậm chí dễ đọc hơn:

assertThat(mynum).isGreaterThanOrEqualTo(min).isLessThanOrEqualTo(max); 

Plus AssertionError nhịp đập phiên bản assertTrue là bạn không cần phải cung cấp một mô tả, ví dụ:

java.lang.AssertionError: 
Expecting: 
<10> 
to be less than or equal to: 
<42> 

Nếu bạn đang sử dụng Java 8 và AssertJ 3.0.0, bạn có thể sử dụng lambda để chỉ định:

assertThat(mynum).matches(actual -> actual >= min && actual <= max); 
+0

Lỗi này dễ đọc hơn như thế nào? 10 nhỏ hơn hoặc bằng 42 để chỉ gây nhầm lẫn. – clcto

+2

Tôi xác nhận đọc tự nhiên hơn so với phiên bản 'assertTrue' và Hamcrest. – Jonathan

7

tôi sẽ sử dụng AssertJ như Jonathan nói, nhưng với khẳng định đơn giản hơn :)

assertThat(mynum).isBetween(min, max); 

Tôi nghĩ rằng đây là giải pháp tuyệt vời :)

Các vấn đề liên quan