Bir ayrıştırıcı yazıyorum ve bunun bir parçası olarak, Expandertek 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 Parserbu testte başarısız olabileceği anlamına geliyor . Yani, deney bir birim test olmayı bırak ediyorum Expanderve ben teknik olarak bir entegrasyon testi haline gelir tahmin Parserve Expander.
Sorum şu: Bu Expandersınıfı test etmek için bu tür entegrasyon testlerine çoğunlukla (veya tamamen) güvenmek doğru mu?
ParserEğ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ğindeParserbu test başarılı olabilir . Sonuçta, birim testleri hataları bulmak için vardır - bir test olmadığı halde olması gerekir.