Dalam kerangka mengejek, Anda bisa mengejek objek atau mata - mata itu. Apa perbedaan antara keduanya dan kapan saya harus menggunakan satu di atas yang lain?
Melihat Mockito , misalnya, saya melihat hal-hal serupa dilakukan dengan menggunakan mata - mata dan cemoohan , tetapi saya tidak yakin mengenai perbedaan antara keduanya.
unit-testing
mocking
tdd
Vivin Paliath
sumber
sumber
Jawaban:
Objek tiruan menggantikan kelas mocked sepenuhnya, mengembalikan nilai yang direkam atau standar. Anda dapat membuat tiruan dari "udara tipis". Inilah yang sebagian besar digunakan selama pengujian unit.
Saat memata-matai, Anda mengambil objek yang ada dan "mengganti" hanya beberapa metode. Ini berguna ketika Anda memiliki kelas besar dan hanya ingin mengejek metode tertentu (mengejek parsial). Izinkan saya mengutip dokumentasi Mockito :
Jika ragu, gunakan cemoohan.
sumber
Mockito memperingatkan bahwa mengejek parsial bukanlah praktik yang baik dan Anda harus merevisi arsitektur Berorientasi Objek Anda. Spy (atau ejekan parsial) disarankan untuk menguji kode lawas .
sumber
Saya akan mencoba menjelaskan menggunakan contoh di sini:
Di sini, kami memiliki objek nyata awal
list
, di mana kami menambahkan satu elemen dan ukuran yang diharapkan menjadi satu.Kami memata-matai objek nyata yang berarti bahwa kami dapat menginstruksikan metode mana yang harus di- stub . Jadi kami menyatakan bahwa kami mematikan metode -
size()
pada objek mata-mata yang akan mengembalikan 10, tidak peduli berapa ukuran sebenarnya.Singkatnya, Anda akan memata - matai objek nyata dan mematikan beberapa metode .
sumber
Referensi: http://javapointers.com/tutorial/difference-between-spy-and-mock-in-mockito/
Saat menggunakan objek tiruan, perilaku default metode ketika tidak stub adalah tidak melakukan apa-apa. Sederhana berarti, jika itu adalah metode batal, maka itu tidak akan melakukan apa-apa ketika Anda memanggil metode atau jika itu adalah metode dengan pengembalian maka dapat mengembalikan nol, kosong atau nilai default.
Sementara di objek mata-mata, tentu saja, karena ini adalah metode nyata, ketika Anda tidak mematikan metode, maka itu akan memanggil perilaku metode nyata. Jika Anda ingin mengubah dan mengejek metode ini, maka Anda harus mematikannya.
sumber
Mocks Aron't Stubs oleh Martin Fowler
sumber
Mata-mata memiliki dua definisi. Satu, adalah tempat metode nyata dipanggil, yang lain di mana, tidak ada fungsi yang dipanggil dan hanya nilai-nilai ekuivalen nol atau nol yang dikembalikan, tetapi metode dipanggil, dan statusnya dicatat, umumnya seperti, metode x disebut y kali.
sumber
Di Mockito jika Anda menetapkan objek apa pun ke variabel instance dari Objek Mock maka tidak mempengaruhi pada Objek Mock.
Tetapi dalam kasus Spy, jika Anda menetapkan objek apa pun ke variabel instan Objek Spy maka tidak memengaruhi Objek Spy karena Spy bertindak seperti modifikasi objek waktu-nyata.
Sebagai contoh referensi adalah
sumber