IMO ini cukup bagus, opsi yang disarankan kurang mudah dibaca
The Godfather
3
@TheGodfather kurang mudah dibaca, tetapi menghasilkan kesalahan pernyataan yang lebih bermakna (yaitu, respons yang diterima akan menunjukkan perbedaan dalam string, sedangkan solusi OPs hanya akan menampilkan "Salah ketika diharapkan Benar" pada kegagalan)
Mike
Apa yang membuat pernyataan "lebih baik" adalah pesan kesalahan ketika gagal. Seberapa mudah dibaca dalam kode adalah sekunder karena itu, karena Anda tidak harus melihat kode sampai gagal, dan pesan kegagalan adalah hal pertama yang Anda lihat.
rjmunro
Jawaban:
291
Jika Anda menambahkan Hamcrest dan JUnit4, Anda bisa melakukan:
String x ="foo bar";Assert.assertThat(x,CoreMatchers.containsString("foo"));
Dengan beberapa impor statis, tampilannya jauh lebih baik:
Pastikan Anda menggunakan org.junit.Assertversus junit.framework.Assert, karena Hamcrest MatcherassertThat()
Visionary Software Solutions
15
Saya pikir ketika menjalankan JUnit 4.10, kelas yang akan digunakan adalah org.junit.matchers.JUnitMatchers, misalnya: assertThat ("sesuatu", JUnitMatchers.containsString ("some"));
Ewen Cartwright
1
Pesan kegagalan untuk yang gagal assertThatjauh lebih bermanfaat daripadaassertTrue
Mike Rylander
3
impor statis yang diperlukan adalah import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;- hanya untuk menyelamatkan seseorang dari masalah
eis
4
... dan org.hamcrest.Matchers.containsString;dalam api terbaru, dalam hamcrest-libraryketergantungan.
eis
13
gunakan fest assert 2.0 bila memungkinkan EDIT: assertj mungkin memiliki lebih banyak pernyataan (garpu)
Saya tidak menemukan metode berisi dengan AssertJ.assertThat. Ini yang saya temukan sebagai gantinya - org.assertj.core.api.Assertions.assertThat (conversionException) .hasMessageContaining ("some substring");
Raj
maaf, saya pikir komentar saya di atas tidak sesuai dengan konteks jawaban ini. Saya menggunakan kasus penggunaan yang berbeda di mana saya perlu memeriksa substring dalam pesan pengecualian.
Raj
8
Gunakan hamcrest Matcher containsString()
// Hamcrest assertion
assertThat(person.getName(), containsString("myName"));// Error Message
java.lang.AssertionError:Expected: a string containing "myName"
got:"some other name"
Anda dapat menambahkan pesan kesalahan yang lebih detail.
// 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"
Diposting jawaban saya untuk pertanyaan rangkap di sini
importstatic org.assertj.core.api.Assertions.assertThat;import org.junit.Test;publicclassTestStr{@Testpublicvoid testThatStringIsContained(){String testStr ="hi,i am a test string";
assertThat(testStr).contains("test");}}
Jadi alih-alih menulis kode yang dapat dibaca, saya memutuskan untuk menggunakan pendekatan sederhana dan bisa diterapkan yang disebutkan dalam pertanyaan.
Jawaban:
Jika Anda menambahkan Hamcrest dan JUnit4, Anda bisa melakukan:
Dengan beberapa impor statis, tampilannya jauh lebih baik:
Impor statis yang dibutuhkan adalah:
sumber
org.junit.Assert
versusjunit.framework.Assert
, karena Hamcrest MatcherassertThat()
assertThat
jauh lebih bermanfaat daripadaassertTrue
import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;
- hanya untuk menyelamatkan seseorang dari masalahorg.hamcrest.Matchers.containsString;
dalam api terbaru, dalamhamcrest-library
ketergantungan.gunakan fest assert 2.0 bila memungkinkan EDIT: assertj mungkin memiliki lebih banyak pernyataan (garpu)
sumber
Gunakan hamcrest Matcher
containsString()
Anda dapat menambahkan pesan kesalahan yang lebih detail.
Diposting jawaban saya untuk pertanyaan rangkap di sini
sumber
Gunakan
assertThat
sintaks baru bersama dengan Hamcrest .Ini tersedia mulai dengan JUnit 4.4 .
sumber
Sudah terlambat, tetapi hanya untuk memperbarui saya menyelesaikannya dengan sintaks di bawah ini
sumber
Varian lain adalah
Apalagi di
org.mockito.internal.matchers
sana ada beberapa korek api yang menarik, sepertiStartWith
,Contains
dll.sumber
varian assertj
sumber
Contoh (versi junit- 4.13)
sumber
Saya sudah mencoba banyak jawaban di halaman ini, tidak ada yang benar-benar berhasil:
Jadi alih-alih menulis kode yang dapat dibaca, saya memutuskan untuk menggunakan pendekatan sederhana dan bisa diterapkan yang disebutkan dalam pertanyaan.
Semoga solusi lain akan muncul.
sumber