Değerlerin doğrulanmasıyla ilgilenen bir sürü sınıfım var. Örneğin, bir RangeValidator
sınıf bir değerin belirtilen aralıkta olup olmadığını kontrol eder.
Her validator sınıfı iki yöntem içerir: bu değer is_valid(value)
döndürür True
veya False
değere bağlı olarak, ensure_valid(value)
belirtilen değeri kontrol eder ve değer geçerliyse hiçbir şey yapmaz veya değer önceden tanımlanmış kurallarla eşleşmezse belirli bir istisna atar.
Şu anda bu yöntemle ilişkili iki birim testi vardır:
Geçersiz bir değer ileten ve istisnanın atılmasını sağlayan değer.
def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5)
Geçerli bir değeri geçen değer.
def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25)
Her ne kadar ikinci test işini yapsa da - istisna atılırsa başarısız olur ve ensure_valid
hiçbir şey atmazsa başarılı olur - assert
içeride hiç bir şey olmadığı gerçeği garip görünüyor. Böyle bir kodu okuyan biri derhal kendisine hiçbir şey yapmıyor gibi görünen bir test olduğunu soracaktır .
Değer döndürmeyen ve yan etkileri olmayan yöntemleri test ederken bu geçerli bir uygulama mıdır? Yoksa testi farklı bir şekilde yeniden mi yazmalıyım? Yoksa basitçe ne yaptığımı açıklayan bir yorum mu koyuyorsunuz?
self
referans için kaydetme ) ve sonuç döndürmeyen bir fonksiyonunuz varsa , bu saf bir fonksiyon değildir.
void
birçok dilde çağrılan ve aptalca kuralları olan "birim türünü döndürür" olarak yorumlanır .) Alternatif olarak, sonsuz bir loop ("hiçbir sonuç döndürmediğinde bile çalışır" gerçekten hiçbir sonuç döndürmediği anlamına gelir.
unit -> unit
. Ne yazık ki, sadece birimi döndürür ve başka bir şey yapmaz.