Coba ikuti struktur mengatur-tindakan-tegas untuk setiap tes.
- Atur objek Anda, dll. Dan masukkan ke dalam kondisi yang diketahui (perlengkapan uji). Kadang-kadang, fase ini termasuk menegaskan untuk menunjukkan bahwa Anda sebenarnya dalam keadaan yang Anda pikirkan.
- Bertindak, yaitu: melakukan perilaku yang Anda uji.
- Tegaskan bahwa Anda mendapatkan hasil yang diharapkan.
Tes Anda tidak perlu repot-repot membuat negara yang dikenal pertama, sehingga tidak ada artinya dalam isolasi.
Selain itu, tes unit tidak harus menguji metode tunggal saja - tes unit harus menguji unit. Biasanya, unit ini adalah kelas. Beberapa metode seperti get()
hanya masuk akal dalam kombinasi dengan yang lain.
Pengujian getter dan setter masuk akal, khususnya dalam bahasa dinamis (hanya untuk memastikan mereka benar-benar ada). Untuk menguji seorang pengambil, kita perlu memberikan nilai yang diketahui terlebih dahulu. Ini mungkin terjadi melalui konstruktor, atau melalui setter. Atau dipandang berbeda: menguji pengambil secara implisit dalam tes setter dan konstruktor. Dan setter, apakah selalu kembali true
, atau hanya ketika nilainya diubah? Ini mungkin mengarah pada tes berikut (pseudocode):
describe Api:
it has a default value:
// arrange
api = new Api()
// act & assert
assert api.get() === expected default value
it can take custom values:
// arrange & act
api = new Api(42)
// act & assert
assert api.get() === 42
describe set:
it can set new values:
// arrange
api = new Api(7)
// act
ok = api.set(13)
// assert
assert ok === true:
assert api.get() === 13
it returns false when value is unchanged:
// arrange
api = new Api(57)
// act
ok = api.set(57)
// assert
assert ok === false
assert api.get() === 57
Menggunakan kembali keadaan dari tes sebelumnya akan membuat tes kami cukup rapuh. Menyusun ulang tes atau mengubah nilai pasti dalam suatu tes dapat menyebabkan tes yang tampaknya tidak terkait gagal. Dengan asumsi negara tertentu juga dapat menyembunyikan bug jika menyebabkan tes lulus yang seharusnya gagal. Untuk mencegah hal ini, beberapa pelari ujian memiliki opsi untuk menjalankan kasus uji secara acak.
Namun, ada beberapa kasus saat kami menggunakan kembali negara yang disediakan oleh tes sebelumnya. Khususnya saat membuat perlengkapan uji memerlukan banyak waktu, kami menggabungkan banyak kasus uji ke dalam rangkaian uji. Walaupun tes ini lebih rapuh, mereka mungkin masih lebih berharga sekarang karena mereka dapat dilakukan lebih cepat dan lebih sering. Dalam praktiknya, menggabungkan tes diinginkan setiap kali tes melibatkan komponen manual, ketika database besar diperlukan, atau ketika menguji mesin negara.
myApi
adalah objek instantiated. Haruskah saya mengaktifkan kembalimyApi
dalam setiap unit test? Atau menggunakannya kembali di antara tes berpotensi menyebabkan tes untuk memberikan positif palsu, dll. Dan ya contoh saya adalah hal pengambil / penyetel yang disederhanakan tetapi pada kenyataannya itu jelas akan jauh lebih rumit.