Nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn có một lớp Một quy định tại một số hội đồng khác, và sau đó một lớp B thực hiện nhiều hay ít như thế này:
public class B : A
{
public override MyMethod(object input)
{
// Do something
base.MyMethod(input);
}
}
Và bây giờ bạn muốn xác minh cơ sở đó. MyMethod được gọi là?
Tôi không thấy cách bạn có thể thực hiện việc này bằng thư viện mô phỏng động. Tất cả các thư viện mô phỏng động (với ngoại lệ của TypeMock) hoạt động bằng cách tự động phát ra các lớp bắt nguồn từ kiểu được đề cập.
Trong trường hợp của bạn, bạn không thể yêu cầu Moq xuất phát từ A, vì bạn muốn kiểm tra B.
Điều này có nghĩa là bạn phải yêu cầu Moq cấp cho bạn Mock<B>
. Tuy nhiên, điều này có nghĩa là kiểu phát xạ xuất phát từ B, và trong khi nó có thể ghi đè MyMethod (vẫn còn ảo) và gọi cơ sở của nó (B.MyMethod), nó không có cách nào để đến lớp gốc và xác minh rằng B gọi base.MyMethod
.
Hãy tưởng tượng rằng bạn phải viết một lớp học (C) có nguồn gốc từ B. Trong khi bạn có thể ghi đè MyMethod, không có cách nào bạn có thể xác minh rằng B gọi A:
public class C : B
{
public override MyMethod(object input)
{
// How to verify that base calls its base?
// base in this context means B, not A
}
}
Một lần nữa với ngoại lệ có thể xảy ra TypeMock, thư viện mô phỏng động không thể làm nhẹ nhàng mà bạn không thể làm theo cách thủ công. Tuy nhiên, tôi cho rằng việc gọi phương thức cơ sở mà bạn đang cố gắng xác minh có một số hiệu ứng phụ quan sát được, vì vậy nếu có thể, bạn có thể sử dụng thử nghiệm dựa trên trạng thái thay vì thử nghiệm dựa trên hành vi để xác minh kết quả gọi phương thức ?
Trong mọi trường hợp, thử nghiệm dựa trên trạng thái phải là phương pháp mặc định của bạn trong hầu hết các trường hợp.
lỗi trình biên dịch: từ khóa 'this' không có sẵn trong ngữ cảnh hiện tại. Trong trường lớp có nguồn gốc. –