ฉันกำลังเขียนโปรแกรมแยกวิเคราะห์และเป็นส่วนหนึ่งของที่ฉันมีExpander
ชั้นเรียนที่ "ขยาย" คำสั่งที่ซับซ้อนเดียวในงบง่าย ๆ หลาย ๆ ตัวอย่างเช่นมันจะขยายสิ่งนี้:
x = 2 + 3 * a
เป็น:
tmp1 = 3 * a
x = 2 + tmp1
ตอนนี้ฉันกำลังคิดเกี่ยวกับวิธีการทดสอบคลาสนี้โดยเฉพาะวิธีการจัดเรียงการทดสอบ ฉันสามารถสร้างแผนภูมิไวยากรณ์อินพุตด้วยตนเองได้:
var input = new AssignStatement(
new Variable("x"),
new BinaryExpression(
new Constant(2),
BinaryOperator.Plus,
new BinaryExpression(new Constant(3), BinaryOperator.Multiply, new Variable("a"))));
หรือฉันสามารถเขียนเป็นสตริงและแยกมัน
var input = new Parser().ParseStatement("x = 2 + 3 * a");
ตัวเลือกที่สองนั้นง่ายกว่าสั้นกว่าและอ่านได้ง่ายกว่ามาก แต่มันยังแนะนำการใช้เดนปาร์เดนParser
ซึ่งหมายความว่าจุดบกพร่องในParser
นั้นอาจล้มเหลวในการทดสอบนี้ ดังนั้นการทดสอบจะหยุดการทดสอบหน่วยExpander
และผมคิดว่าในทางเทคนิคจะกลายเป็นทดสอบการบูรณาการและParser
Expander
คำถามของฉันคือ: มันไม่เป็นไรที่จะพึ่งพาส่วนใหญ่ (หรือทั้งหมด) ในการทดสอบการรวมกลุ่มนี้เพื่อทดสอบExpander
คลาสนี้?
Parser
อาจล้มเหลวบางทดสอบอื่น ๆParser
ไม่ได้เป็นปัญหาถ้าคุณเป็นปกติวิสัยกระทำเฉพาะที่ศูนย์ความล้มเหลวในทางตรงกันข้ามก็หมายความว่าคุณมีความคุ้มครองมากขึ้นของ สิ่งที่ผมค่อนข้างจะกังวลเกี่ยวกับการเป็นที่ข้อผิดพลาดในการParser
ที่จะทำให้ประสบความสำเร็จในการทดสอบนี้เมื่อมันควรจะมีการล้มเหลว การทดสอบหน่วยจะไปหาข้อบกพร่องหลังจากทั้งหมด - การทดสอบจะขาดเมื่อมันไม่ได้ แต่ควรมี