Tôi đang viết một trình phân tích cú pháp và là một phần trong đó, tôi có một Expander
lớp "mở rộng" một câu lệnh phức tạp thành nhiều câu lệnh đơn giản. Ví dụ, nó sẽ mở rộng điều này:
x = 2 + 3 * a
vào:
tmp1 = 3 * a
x = 2 + tmp1
Bây giờ tôi đang suy nghĩ về cách kiểm tra lớp này, cụ thể là cách sắp xếp các bài kiểm tra. Tôi có thể tự tạo cây cú pháp đầu vào:
var input = new AssignStatement(
new Variable("x"),
new BinaryExpression(
new Constant(2),
BinaryOperator.Plus,
new BinaryExpression(new Constant(3), BinaryOperator.Multiply, new Variable("a"))));
Hoặc tôi có thể viết nó dưới dạng một chuỗi và phân tích nó:
var input = new Parser().ParseStatement("x = 2 + 3 * a");
Tùy chọn thứ hai đơn giản hơn nhiều, ngắn hơn và dễ đọc hơn. Nhưng nó cũng giới thiệu một sự từ chối Parser
, điều đó có nghĩa là một lỗi trong Parser
có thể thất bại trong bài kiểm tra này. Vì vậy, bài kiểm tra sẽ dừng là một bài kiểm tra đơn vị Expander
và tôi đoán về mặt kỹ thuật sẽ trở thành một bài kiểm tra tích hợp Parser
và Expander
.
Câu hỏi của tôi là: có ổn không khi dựa chủ yếu (hoặc hoàn toàn) vào loại kiểm tra tích hợp này để kiểm tra Expander
lớp này ?
Parser
có thể thất bại một số thử nghiệm khác không phải là vấn đề nếu bạn thường xuyên chỉ cam kết ở mức không có lỗi, ngược lại, điều đó có nghĩa là bạn có phạm vi bảo hiểm nhiều hơnParser
. Điều tôi thà lo lắng là một lỗi trongParser
có thể làm cho thử nghiệm này thành công khi đáng lẽ nó phải thất bại . Các bài kiểm tra đơn vị ở đó để tìm lỗi, sau khi tất cả các bài kiểm tra bị hỏng khi không có nhưng nên có.