Jadi, saya punya modul otentikasi yang saya tulis beberapa waktu lalu. Sekarang saya melihat kesalahan cara saya dan menulis tes unit untuk itu. Saat menulis unit test, saya kesulitan menemukan nama baik dan area bagus untuk diuji. Misalnya, saya punya hal-hal seperti
- MembutuhkanLogin_should_redirect_when_not_logged_in
- MembutuhkanLogin_should_pass_through_when_logged_in
- Login_should_work_when_given_proper_credentials
Secara pribadi, saya pikir itu agak jelek, meskipun sepertinya "tepat". Saya juga mengalami kesulitan membedakan antara tes hanya dengan memindai mereka (saya harus membaca nama metode setidaknya dua kali untuk mengetahui apa yang baru saja gagal)
Jadi, saya berpikir bahwa mungkin alih-alih menulis tes yang murni menguji fungsionalitas, mungkin menulis serangkaian tes yang mencakup skenario.
Misalnya, ini adalah rintisan tes yang saya buat:
public class Authentication_Bill
{
public void Bill_has_no_account()
{ //assert username "bill" not in UserStore
}
public void Bill_attempts_to_post_comment_but_is_redirected_to_login()
{ //Calls RequiredLogin and should redirect to login page
}
public void Bill_creates_account()
{ //pretend the login page doubled as registration and he made an account. Add the account here
}
public void Bill_logs_in_with_new_account()
{ //Login("bill", "password"). Assert not redirected to login page
}
public void Bill_can_now_post_comment()
{ //Calls RequiredLogin, but should not kill request or redirect to login page
}
}
Apakah ini pola yang terdengar? Saya telah melihat kisah penerimaan dan semacamnya, tetapi ini pada dasarnya berbeda. Perbedaan besar adalah bahwa saya datang dengan skenario untuk "memaksa" tes. Daripada mencoba secara manual untuk menemukan kemungkinan interaksi yang perlu saya uji. Juga, saya tahu ini mendorong unit test yang tidak menguji persis satu metode dan kelas. Saya pikir ini tidak masalah. Juga, saya sadar bahwa ini akan menyebabkan masalah untuk setidaknya beberapa kerangka kerja pengujian, karena mereka biasanya menganggap bahwa pengujian independen satu sama lain dan urutan tidak masalah (di mana dalam kasus ini).
Ngomong-ngomong, apakah ini pola yang disarankan? Atau, apakah ini akan sangat cocok untuk tes integrasi API saya daripada sebagai tes "unit"? Ini hanya dalam proyek pribadi, jadi saya terbuka untuk eksperimen yang mungkin atau mungkin tidak berjalan dengan baik.
_test
menambahkan dan menggunakan komentar untuk mencatat hasil apa yang saya harapkan. Jika ini adalah proyek pribadi, temukan beberapa gaya yang Anda rasa nyaman dan pertahankan.