Bu yüzden, bir süre önce yazdığım bir doğrulama modülüm var. Şimdi yolumdaki hataları görüyorum ve bunun için birim testleri yazıyorum. Birim testleri yazarken, iyi isimler ve test edilecek iyi alanlar bulmakta zorlanıyorum. Mesela benim gibi şeylerim var
- RequiresLogin_should_redirect_when_not_logged_in
- RequiresLogin_should_pass_through_when_logged_in
- Login_should_work_when_given_proper_credentials
Şahsen, "uygun" görünse de biraz çirkin olduğunu düşünüyorum. Ben de sadece onları tarayarak testler arasında ayrım yapmakta sorun var (ben sadece neyin başarısız olduğunu bilmek için yöntem adını en az iki kez okumak zorunda)
Bu yüzden, belki de sadece işlevselliği test eden testler yazmak yerine, senaryoları kapsayan bir dizi test yazacağımı düşündüm.
Örneğin, bu bir test saplama olduğunu:
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
}
}
Bu bir örüntü duyuldu mu? Kabul öyküleri gördüm, ama bu temelde farklı. En büyük fark, testleri "zorlamak" için senaryolar bulmam. Test etmem gereken olası etkileşimleri manuel olarak bulmaya çalışmak yerine. Ayrıca, bunun tam olarak bir yöntem ve sınıfı test etmeyen birim testlerini teşvik ettiğini biliyorum. Bence bu tamam. Ayrıca, genellikle testlerin birbirinden bağımsız olduğunu ve siparişin önemli olmadığını (bu durumda nerede olacağını) varsaydıklarından, bunun en azından bazı test çerçeveleri için sorunlara neden olacağının farkındayım.
Her neyse, bu tavsiye edilebilir bir kalıp mı? Veya bu, "birim" testleri yerine API'mın entegrasyon testleri için mükemmel bir seçim olabilir mi? Bu sadece kişisel bir projede, bu yüzden iyi gidebilecek veya gelmeyebilecek deneylere açığım.
_test
ekli ile test ettiğim şeyin adını kullanıyorum ve beklediğim sonuçları not etmek için yorumları kullanıyorum. Kişisel bir proje ise, kendinizi rahat hissettiğiniz bir tarz bulun ve buna bağlı kalın.