Bir ayrıştırıcı yazıyorum ve bunun bir parçası olarak, Expander
tek bir karmaşık deyimi birden çok basit ifadeye "genişleten" bir sınıf var. Örneğin, bunu genişletir:
x = 2 + 3 * a
içine:
tmp1 = 3 * a
x = 2 + tmp1
Şimdi bu sınıfı nasıl test edeceğimizi, özellikle testleri nasıl düzenleyeceğimizi düşünüyorum. El ile giriş sözdizimi ağacı oluşturabilir:
var input = new AssignStatement(
new Variable("x"),
new BinaryExpression(
new Constant(2),
BinaryOperator.Plus,
new BinaryExpression(new Constant(3), BinaryOperator.Multiply, new Variable("a"))));
Veya ben bir dize olarak yazmak ve ayrıştırmak olabilir:
var input = new Parser().ParseStatement("x = 2 + 3 * a");
İkinci seçenek çok daha basit, daha kısa ve okunabilir. Ama aynı zamanda bir bağımlılık da getiriyor Parser
, bu da bir hatanın Parser
bu testte başarısız olabileceği anlamına geliyor . Yani, deney bir birim test olmayı bırak ediyorum Expander
ve ben teknik olarak bir entegrasyon testi haline gelir tahmin Parser
ve Expander
.
Sorum şu: Bu Expander
sınıfı test etmek için bu tür entegrasyon testlerine çoğunlukla (veya tamamen) güvenmek doğru mu?
Parser
Eğer alışkanlık olarak sadece sıfır hata yaparsanız, bir hata başka bir test başarısız olabilir, aksine daha fazla kapsama sahip olduğu anlamına gelirParser
. Ne hakkında oldukça endişe ediyorum bir hata başarısız olması gerektiğindeParser
bu test başarılı olabilir . Sonuçta, birim testleri hataları bulmak için vardır - bir test olmadığı halde olması gerekir.