Katakanlah saya memiliki semacam unit test seperti ini:
let myApi = new Api();
describe('api', () => {
describe('set()', () => {
it('should return true when setting a value', () => {
assert.equal(myApi.set('foo', 'bar'), true);
});
});
describe('get()', () => {
it('should return the value when getting the value', () => {
assert.equal(myApi.get('foo'), 'bar');
});
});
});
Jadi sekarang saya punya 2 unit tes. Satu menetapkan nilai dalam API. Yang lain menguji untuk memastikan nilai yang tepat dikembalikan. Namun tes 2 tergantung pada yang pertama. Haruskah saya menambahkan .set()
metode dalam tes ke-2 sebelum get()
dengan tujuan tunggal untuk memastikan tes ke-2 tidak tergantung pada hal lain?
Juga, dalam contoh ini saya harus instantiating myApi
untuk setiap tes daripada melakukannya sekali sebelum tes?
sumber
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.Coba ikuti struktur mengatur-tindakan-tegas untuk setiap tes.
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):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.
sumber