Saya menggunakan keduanya secara sporadis, tetapi menurut dokumen:
Melaporkan kesalahan yang diidentifikasi oleh $message
jika dua variabel $expected
dan $actual
tidak memiliki jenis dan nilai yang sama . "
Dan seperti yang Anda lihat pada contoh di bawah kutipan di atas, mereka melewati '2204'
dan 2204
, yang akan gagal digunakan assertSame
karena satu adalah a string
dan satu int,
pada dasarnya adalah:
'2204' !== 2204
assertSame('2204', 2204) // this test fails
"Melaporkan kesalahan yang diidentifikasi oleh $ message jika dua variabel $ yang diharapkan dan $ aktual tidak sama."
assertEquals
tampaknya tidak mempertimbangkan tipe data, jadi gunakan contoh di atas 2204
:
'2204' == 2204
assertEquals('2204', 2204) // this test passes
Saya baru saja menjalankan beberapa unit test terhadap contoh-contoh di atas, dan memang mereka menghasilkan perilaku yang terdokumentasi.
'0012' == '12'
. Meskipun kedua nilai adalah string, keduanya akan diubah menjadi bilangan bulat untuk perbandingan! Anda harus benar-benar menggunakan assertSame kapan pun Anda bisa.assertSame()
. Melaporkan kesalahan yang diidentifikasi oleh $ message jika dua variabel $ diharapkan dan $ aktual tidak merujuk objek yang sama. phpunit.de/manual/current/en/…Dalam hal perbandingan objek:
assertSame: hanya dapat menegaskan jika 2 objek mereferensikan instance objek yang sama. Jadi, meskipun 2 objek terpisah untuk semua atributnya memiliki nilai yang persis sama, assertSame akan gagal jika tidak mereferensikan instance yang sama.
assertEquals: dapat menegaskan jika 2 objek terpisah cocok dengan nilai atributnya dalam hal apa pun. Jadi itu metode yang cocok untuk menyatakan kecocokan objek.
https://phpunit.de/manual/current/en/appendixes.assertions.html
sumber
Yang pertama akan lewat!
Yang kedua akan gagal.
Itulah perbedaannya.
Saya pikir Anda harus selalu menggunakan assertSame.
sumber
Seperti yang telah dikatakan sebelumnya,
AssertSame
melaporkan kesalahan jika kedua elemen tidak berbagi jenis dan nilai tetapi penting juga untuk mencatat ini dari dokumentasi :Jadi tes ini akan gagal juga meskipun mereka memiliki tipe dan nilai yang sama:
sumber
Bahkan,
sumber
assertSame () == Menguji apakah keluaran aktual dan parameter yang diharapkan sama.
itu adalah :
atau
assertEquals == Jika kita melihat sehubungan dengan halaman situs web, saya memiliki halaman yang memiliki 2 'tabel' jadi ketika saya menjalankan assertEquals saya akan memeriksa hitungannya bahwa 'tabel' adalah 2 dengan menggunakan fungsi hitungan. Misalnya:
Di sini kita dapat melihat assertEquals memeriksa bahwa ada 2 tabel yang ditemukan di halaman web. kita juga dapat menggunakan divisi yang ditemukan di halaman menggunakan '# nama divisi' di dalam tanda kurung.
Misalnya 2:
sumber
#
markup kecuali Anda ingin membuat tajuk.Seperti yang disebutkan sebelumnya,
assertEquals()
ini terutama tentang nilai yang ditafsirkan, baik itu dengan jenis juggling atau objek dengan metode presentasi __magic (__toString()
misalnya).Kasus penggunaan yang baik
assertSame()
adalah menguji pabrik tunggal.sumber