Saya menggunakan tiruan dengan Python dan bertanya-tanya mana dari dua pendekatan itu yang lebih baik (baca: lebih banyak pythonic).
Metode satu : Buat saja objek tiruan dan gunakan itu. Kode tersebut terlihat seperti:
def test_one (self):
mock = Mock()
mock.method.return_value = True
self.sut.something(mock) # This should called mock.method and checks the result.
self.assertTrue(mock.method.called)
Metode dua : Gunakan tambalan untuk membuat tiruan. Kode tersebut terlihat seperti:
@patch("MyClass")
def test_two (self, mock):
instance = mock.return_value
instance.method.return_value = True
self.sut.something(instance) # This should called mock.method and checks the result.
self.assertTrue(instance.method.called)
Kedua metode tersebut melakukan hal yang sama. Saya tidak yakin dengan perbedaannya.
Adakah yang bisa mencerahkan saya?
python
unit-testing
mocking
Sardathrion - melawan penyalahgunaan SE
sumber
sumber
Jawaban:
mock.patch
adalah makhluk yang sangat berbeda darimock.Mock
.patch
mengganti kelas dengan objek tiruan dan memungkinkan Anda bekerja dengan contoh tiruan. Lihat cuplikan ini:patch
menggantikanMyClass
dengan cara yang memungkinkan Anda mengontrol penggunaan kelas dalam fungsi yang Anda panggil. Setelah Anda menambal kelas, referensi ke kelas tersebut sepenuhnya diganti dengan contoh tiruan.mock.patch
biasanya digunakan saat Anda menguji sesuatu yang membuat instance baru dari kelas di dalam pengujian.mock.Mock
contoh lebih jelas dan lebih disukai. Jikaself.sut.something
metode Anda membuat instanceMyClass
alih - alih menerima instance sebagai parameter, makamock.patch
akan sesuai di sini.sumber
Saya punya video YouTube tentang ini.
Jawaban singkat: Gunakan
mock
ketika Anda menyampaikan hal yang Anda ingin diejek, danpatch
jika tidak. Dari keduanya, tiruan sangat disukai karena itu berarti Anda menulis kode dengan injeksi ketergantungan yang tepat.Contoh konyol:
sumber