Bunun herhangi bir şekilde yanlış düşünebileceğine inanıyorum.
Üretim kodunu test eden test kodu hiç de benzer değil. Python'da göstereceğim:
def multiply(a, b):
"""Multiply ``a`` by ``b``"""
return a*b
O zaman basit bir test şöyle olur:
def test_multiply():
assert multiply(4, 5) == 20
Her iki işlev de benzer bir tanıma sahiptir, ancak her ikisi de çok farklı şeyler yapar. Burada yinelenen kod yok. ;-)
İnsanların esasen test fonksiyonu başına bir iddiası olan yinelenen testler yazmaları da oluşur. Bu delilik ve insanların bunu yaptığını gördüm. Bu ise kötü uygulama.
def test_multiply_1_and_3():
"""Assert that a multiplication of 1 and 3 is 3."""
assert multiply(1, 3) == 3
def test_multiply_1_and_7():
"""Assert that a multiplication of 1 and 7 is 7."""
assert multiply(1, 7) == 7
def test_multiply_3_and_4():
"""Assert that a multiplication of 3 and 4 is 12."""
assert multiply(3, 4) == 12
Bunu 1000'den fazla etkili kod satırı için yaptığınızı düşünün. Bunun yerine 'özellik' temelinde test yaparsınız:
def test_multiply_positive():
"""Assert that positive numbers can be multiplied."""
assert multiply(1, 3) == 3
assert multiply(1, 7) == 7
assert multiply(3, 4) == 12
def test_multiply_negative():
"""Assert that negative numbers can be multiplied."""
assert multiply(1, -3) == -3
assert multiply(-1, -7) == 7
assert multiply(-3, 4) == -12
Şimdi özellikler eklendiğinde / kaldırıldığında sadece bir test fonksiyonu eklemeyi / kaldırmayı düşünmeliyim.
for
Döngüler uygulamadığımı fark etmiş olabilirsiniz . Çünkü bazı şeyleri tekrarlamak iyidir. Döngüler uygularsam kod çok daha kısa olurdu. Ancak bir iddia başarısız olduğunda, çıktı belirsiz bir mesaj göstererek gizlenebilir. Bu durumda, testleriniz daha az yararlı olacaktır ve işlerin nerede yanlış gittiğini incelemek için bir hata ayıklayıcıya ihtiyacınız olacaktır .