Có cách nào đẹp hơn để viết trong jUnit
String x = "foo bar";
Assert.assertTrue(x.contains("foo"));
Có cách nào đẹp hơn để viết trong jUnit
String x = "foo bar";
Assert.assertTrue(x.contains("foo"));
Câu trả lời:
Nếu bạn thêm vào Hamcrest và JUnit4, bạn có thể làm:
String x = "foo bar";
Assert.assertThat(x, CoreMatchers.containsString("foo"));
Với một số nhập khẩu tĩnh, có vẻ tốt hơn rất nhiều:
assertThat(x, containsString("foo"));
Các nhập khẩu tĩnh cần thiết sẽ là:
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.containsString;
org.junit.Assert
so với junit.framework.Assert
, vì cái sau không có Hamcrest MatcherassertThat()
assertThat
là cách hữu ích hơn sau đóassertTrue
import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;
- chỉ để cứu ai đó khỏi rắc rối
org.hamcrest.Matchers.containsString;
trong api mới nhất, trong sự hamcrest-library
phụ thuộc.
sử dụng festival assert 2.0 bất cứ khi nào có thể EDIT: assertj có thể có nhiều xác nhận hơn (một ngã ba)
assertThat(x).contains("foo");
Sử dụng Hamcrest Matcher containsString()
// Hamcrest assertion
assertThat(person.getName(), containsString("myName"));
// Error Message
java.lang.AssertionError:
Expected: a string containing "myName"
got: "some other name"
Bạn có thể tùy chọn thêm một thông báo lỗi chi tiết hơn nữa.
// Hamcrest assertion with custom error message
assertThat("my error message", person.getName(), containsString("myName"));
// Error Message
java.lang.AssertionError: my error message
Expected: a string containing "myName"
got: "some other name"
Đăng câu trả lời của tôi cho một câu hỏi trùng lặp ở đây
Một biến thể khác là
Assert.assertThat(actual, new Matches(expectedRegex));
Hơn nữa trong org.mockito.internal.matchers
đó có một số đối sánh thú vị khác, như StartWith
, Contains
vv
biến thể assertj
import org.assertj.core.api.Assertions;
Assertions.assertThat(actualStr).contains(subStr);
Ví dụ (phiên bản Junit- 4.13)
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
public class TestStr {
@Test
public void testThatStringIsContained(){
String testStr = "hi,i am a test string";
assertThat(testStr).contains("test");
}
}
Tôi đã thử nhiều câu trả lời trên trang này, không có câu trả lời nào thực sự hiệu quả:
Vì vậy, thay vì viết mã có thể đọc được, tôi quyết định sử dụng cách tiếp cận đơn giản và khả thi được đề cập trong câu hỏi thay thế.
Hy vọng một giải pháp khác sẽ được đưa ra.