@@ -206,4 +206,33 @@ Karena mutation score dari test adalah 100%, maka tidak perlu menambahkan test c
1. Menggunakan mock library menghasilkan code yang lebih clean.
2. Dalam mock library, cukup menggunakan decorator `patch` untuk menunjuk object yang ingin di-mock. Setelah test yang terdapat decorator tersebut dijalankan, object yang di-mock akan kembali ke bentuk awalnya sehingga tidak merubah object dalam test lain. Sementara dalam monkeypatching object tidak kembali ke keadaan awalnya sehingga dapat merusak test lain.
3. Mock library dapat me-record behaviour dari mock object yang dipanggil.
4. Mock library dapat me-return value spesifik dengan `return_value`, dan raise exception dengan `side_effect`.
\ No newline at end of file
4. Mock library dapat me-return value spesifik dengan `return_value`, dan raise exception dengan `side_effect`.
### Mock Tightly Coupled Pada Implementasi
Dalam testing sebaiknya yang dites adalah behaviour-nya, bukan implementasinya. Namun dalam mocking, hal tersebut tidak dapat direalisasikan. Contohnya dalam kode
expected="Check your email, we've sent you a link you can use to log in."
self.assertEqual(
mock_messages.success.call_args,
call(response.wsgi_request,expected),
)
```
Implementasinya:
```python
messages.add_message(
request,
messages.SUCCESS,
"Check your email, we've sent you a link you can use to log in."
```
Dalam test nonmock akan pass, namun dalam test mock akan fail. Ini terjadi karena object yang di-mock adalah `accounts.views.messages` dan yang digunakan untuk assert adalah `messages.success`. Sementara dalam implementasi digunakan `messages.add_messages`. Sehingga meskipun hasil yang didapatkan sama, test yang dijalankan akan terus fail.