This section contains exercise 3 details which refer to the obeythetestinggoat chapter 6.
#### Steps I've been through
1. Refactoring
1. Refactoring<br>
sebelum mengimplementasikan `test isolation` dilakukan pemindahan file functional_tests.py ke dalam folder functional_tests dan mengubah nama file menjadi tests.py (functional_tests/tests.py). Django membutuhkan __init__.py untuk menjadi Python package yang valid, sehingga perlu ditambahkan file functional_tests/__init__.py. Hal ini berguna untuk pemanggilan functional_tests yang lebih mudah menjadi --> `python manage.py test functional_tests`
2. Using Python Test runner
2. Using Python Test runner<br>
Untuk menggunakan Python Test runner class yang digunakan pada functional_tests/tests.py diubah dari UnitTest menjadi LiveServerTestCase. Untuk kode tes yang lebih baik, URL tidak perlu lagi menggunakan *hard code* untuk `localhost:8000`. LiveServerTestCase menyediakan atribut bawaan untuk URL app yang akan diuji, yaitu method *live_server_url*. Atribut tersebut akan dipanggil menjadi `self.live_server_url`.
3. Explicit to Implicit waiting
3. Explicit to Implicit waiting<br>
Pada chapter 5, functional_tests.py menunggu selama 1 detik untuk output data. Namun pada chapter 6 ini, data akan dipanggil sampai hasilnya diperoleh. Waktu tunggu maksimal adalah 10 detik. Kode yang kali ini lebih efektif karena waktu tunggu untuk hasil lebih dinamis (menyesuaikan lama waktu elemen diperoleh).
*Where the Test Isolation implemented?*
*Where the Test Isolation implemented?*<br>
Test Isolation sendiri adalah mengisolasi setiap tes untuk menghilangkan ketergantungannya satu sama lain antar tes. Pada awalnya kita menjalankan functional_tests.py memengaruhi database `item` yang ada. Hal ini tidak baik karena akan mengganggu nilai yang akan diuji oleh tes yang lain. Untuk mempersiapkan database setiap test method dapat menggunakan `setUp` dan `tearDown` method. Selain dari cara itu, untuk Django 1.4++ disediakan class LiveServerTestCase yang secara otomatis menyediakan test database.
#### Before 'n After
1.`localhost:8000` or any hard code URL (staging URL) --> self.live_server_url
1.`localhost:8000` or any hard code URL (staging URL) --> self.live_server_url<br>