Buradaki cevapların çoğu, testleri kendileri (nasıl) yazmaktan ziyade, genel olarak birim testi en iyi uygulamalarını (ne zaman, nerede, neden ve ne) ele alıyor gibi görünüyor. Soru "nasıl" bölümünde oldukça spesifik göründüğünden, bunu şirketimde yaptığım "kahverengi çanta" sunumundan alarak yayınlayacağımı düşündüm.
Womp'un 5 Yazma Testi Yasası:
1. Uzun, açıklayıcı test yöntemi adları kullanın.
- Map_DefaultConstructorShouldCreateEmptyGisMap()
- ShouldAlwaysDelegateXMLCorrectlyToTheCustomHandlers()
- Dog_Object_Should_Eat_Homework_Object_When_Hungry()
2. Testlerinizi bir Düzenleme / Harekete Geçme / Onaylama tarzında yazın .
- Bu örgütsel strateji bir süredir ortalıkta dolaşıp pek çok şey ifade etse de, son zamanlarda "AAA" kısaltmasının tanıtılması, bunu aşmak için harika bir yol oldu. Tüm testlerinizi AAA stiliyle tutarlı hale getirmek, onları okumayı ve sürdürmeyi kolaylaştırır.
3. Onaylarınızla her zaman bir hata mesajı sağlayın.
Assert.That(x == 2 && y == 2, "An incorrect number of begin/end element
processing events was raised by the XElementSerializer");
- Koşucu uygulamanızda neyin başarısız olduğunu açıkça gösteren basit ama ödüllendirici bir uygulama. Bir mesaj vermezseniz, başarısızlık çıktınızda genellikle "Doğru olması bekleniyordu, yanlıştı" gibi bir şey görürsünüz, bu da neyin yanlış olduğunu bulmak için gerçekten testi okumanıza neden olur.
4. Testin nedenini yorumlayın - iş varsayımı nedir?
/// A layer cannot be constructed with a null gisLayer, as every function
/// in the Layer class assumes that a valid gisLayer is present.
[Test]
public void ShouldNotAllowConstructionWithANullGisLayer()
{
}
- Bu açık görünebilir, ancak bu uygulama testlerinizin bütünlüğünü ilk etapta testin arkasındaki nedeni anlamayan kişilerden koruyacaktır. Tamamen iyi olan birçok testin kaldırıldığını veya değiştirildiğini gördüm, çünkü kişi testin doğruladığı varsayımlarını anlamadı.
- Test önemsizse veya yöntem adı yeterince açıklayıcıysa, yorumun kapalı bırakılmasına izin verilebilir.
5. Her test, dokunduğu herhangi bir kaynağın durumunu daima geri döndürmelidir
- Gerçek kaynaklarla uğraşmaktan kaçınmak için mümkün olduğunca taklitler kullanın.
- Temizleme test seviyesinde yapılmalıdır. Testler, uygulama sırasına bağlı olmamalıdır.