Fakultas Ilmu Komputer UI

Commit 1c4f2864 authored by Farah Alhaniy Efendi's avatar Farah Alhaniy Efendi
Browse files

Update README.md

parent a584e4b6
Pipeline #25529 canceled with stages
in 4 minutes and 38 seconds
......@@ -119,7 +119,7 @@ Destroying test database for alias 'default'...
```
Dari hasil tersebut dapat kita lihat bahwa semua mutant sudah berhasil di kill oleh test yang ada.
## Exercise 6
## Exercise 7
**Spiking**
Spiking adalah sebuah tahapan coding dimana kita mengeksplor suatu API baru atau solusi-solusi baru. Pada exercise, spiking dilakukan pada branch passwordless-spike dimana kita mengeksplor mengenai pengimplementasian paswordless auth.
......@@ -127,3 +127,50 @@ Spiking adalah sebuah tahapan coding dimana kita mengeksplor suatu API baru atau
**De-Spiking**
De-spiking adalah tahapan dimana kita mengimplementasikan hasil di spiking dan menggunakannya di production codebase (master). Karena di spiking dapat dilakukan tanpa test, pada tahap De-spiking kita akan menggunakan TDD dalam implementasinya.
## Exercise 8
**Kenapa mocking dapat membuat implementasi yang kita buat tightly coupled?**
Penggunaan Mocking seringkali terikat pada bagaimana kita mengimplementasikan sesuatu. Ketika kita melakukan implementasi yang berbeda, walaupun hasilnya sama, test bisa saja tidak terpenuhi. Hal ini yang dimaksud dari "Mocks Can Leave You Tightly Coupled to the Implementation". Sedangkan biasanya, mengetest behavior lebih baik daripada mengetest detil implementasi.
Contohnya pada kasus untuk test (tanpa mock) berikut **accounts/tests/test_views.py**
```
def test_adds_success_message(self):
response = self.client.post('/accounts/send_login_email', data={
'email': 'edith@example.com'
}, follow=True)
message = list(response.context['messages'])[0]
self.assertEqual(
message.message,
"Check your email, we've sent you a link you can use to log in."
)
self.assertEqual(message.tags, "success")
```
Kita dapat mengubah test tersebut agar menggunakan mock, sehingga menjadi seperti ini
```
@patch('accounts.views.messages')
def test_adds_success_message_with_mocks(self, mock_messages):
response = self.client.post('/accounts/send_login_email', data={
'email': 'edith@example.com'
})
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),
)
```
Dengan implementasi di **accounts/views.py** seperti berikut ini
```
​messages.add_message(
​request,
​messages.SUCCESS,
​"Check your email, we've sent you a link you can use to log in."
)
```
Dengan implementasi tersebut, test tanpa mock terpenuhi sedangkan test dengan mock gagal terpenuhi. Dalam kata lain, dengan mock kita harus memiliki detil implementasi yang sesuai pada views, walaupun sebenarnya hasilnya sama sama benar.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment