Saya menulis parser dan sebagai bagian dari itu, saya memiliki Expander
kelas 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 Parser
bisa 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 Expander
kelas ini ?
Parser
dapat 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 dalamParser
dapat membuat tes ini berhasil padahal seharusnya gagal . Tes unit ada untuk menemukan bug, setelah semua - tes rusak ketika tidak tetapi harus dilakukan.