Birim testlerimde, ne yaptığını görmek için koduma rastgele değerler atarım. Örneğin, bunun foo(1, 2, 3)
17'ye dönmesi gerektiğini biliyorsanız , şunu yazabilirim:
assertEqual(foo(1, 2, 3), 17)
Bu sayılar tamamen keyfidir ve daha geniş bir anlamı yoktur (bunlar üzerinde de test etmeme rağmen, örneğin sınır koşulları değildir). Bu numaralar için iyi isimler bulmakta zorlanıyorum ve böyle bir şey yazmanın const int TWO = 2;
yararsız olduğu açık. Testleri böyle yazmak uygun mudur, yoksa sayıları sabitler olarak mı belirlemeliyim?
In Are tüm sihirli numaraları aynı yarattı? , anlamın bağlamdan açık olması durumunda, sihirli sayıların tamam olduğunu öğrendik, ancak bu durumda sayıların aslında hiçbir anlamı yoktur.
const int TWO = 2;
sadece kullanmaktan bile daha kötü 2
. Bu, onun ruhunu ihlal etme niyeti ile kuralın ifade edilmesine uygundur.
foo
, hiçbir şey ifade etmez ve bu yüzden parametreler. Ama gerçekte, ben işlevi o adı yok eminim, ve parametreler adları yok bar1
, bar2
ve bar3
. İsimler daha gerçekçi bir örnek olun var bir anlam, o zaman test veri değerleri bir isim gerekiyorsa da, konuşacak çok daha mantıklı.
1, 2, 3
daha önce değeri kaydettiğiniz 3B dizi endeksleri ise17
, o zaman bu testin nezaketsiz olacağını düşünüyorum (bazı negatif testleriniz olduğu sürece). Ancak bir hesaplamanın sonucuysa, bu testi okuyan birinin nedenfoo(1, 2, 3)
olması gerektiğini anlayacağından17
ve sihir rakamlarının muhtemelen bu hedefe ulaşamayacağından emin olmalısınız .