Saya menulis parser dan sebagai bagian dari itu, saya memiliki Expanderkelas yang "memperluas" pernyataan kompleks tunggal menjadi beberapa pernyataan sederhana. Misalnya, itu akan memperluas ini:
x = 2 + 3 * a
ke:
tmp1 = 3 * a
x = 2 + tmp1
Sekarang saya sedang berpikir tentang bagaimana menguji kelas ini, khususnya bagaimana mengatur tes. Saya bisa secara manual membuat pohon sintaks input:
var input = new AssignStatement(
new Variable("x"),
new BinaryExpression(
new Constant(2),
BinaryOperator.Plus,
new BinaryExpression(new Constant(3), BinaryOperator.Multiply, new Variable("a"))));
Atau saya bisa menulisnya sebagai string dan menguraikannya:
var input = new Parser().ParseStatement("x = 2 + 3 * a");
Opsi kedua jauh lebih sederhana, lebih pendek dan mudah dibaca. Tapi itu juga memperkenalkan denpendensi Parser, yang berarti bug di Parserbisa gagal dalam tes ini. Jadi, tes akan berhenti menjadi unit test Expander, dan saya kira secara teknis menjadi tes integrasiParser dan Expander.
Pertanyaan saya adalah: apakah boleh mengandalkan sebagian besar (atau sepenuhnya) pada tes integrasi semacam ini untuk menguji Expanderkelas ini ?
Parserdapat gagal dalam beberapa pengujian lain tidak menjadi masalah jika Anda terbiasa melakukan hanya pada nol kegagalan, sebaliknya itu berarti Anda memiliki lebih banyak cakupanParser. Apa yang saya lebih suka khawatirkan adalah bug dalamParserdapat membuat tes ini berhasil padahal seharusnya gagal . Tes unit ada untuk menemukan bug, setelah semua - tes rusak ketika tidak tetapi harus dilakukan.