Tôi đã phải đối mặt với điều gì đó tương tự như vậy trong một trong những dự án cũ và kế thừa mà tôi đã làm việc trong đó không chứa bất kỳ giao diện hoặc phương pháp hay nhất nào và cũng quá khó để thực thi chúng xây dựng lại mọi thứ hoặc cấu trúc lại mã do sự trưởng thành của kinh doanh dự án, Vì vậy trong dự án UnitTest của tôi, tôi đã sử dụng để tạo một Wrapper trên các lớp mà tôi muốn mô phỏng và giao diện triển khai wrapper đó chứa tất cả các phương thức cần thiết của tôi mà tôi muốn thiết lập và làm việc, Bây giờ tôi có thể giả lập wrapper thay vì lớp thực.
Ví dụ:
Dịch vụ bạn muốn kiểm tra không chứa các phương thức ảo hoặc giao diện triển khai
public class ServiceA{
public void A(){}
public String B(){}
}
Wrapper thành moq
public class ServiceAWrapper : IServiceAWrapper{
public void A(){}
public String B(){}
}
Giao diện Wrapper
public interface IServiceAWrapper{
void A();
String B();
}
Trong bài kiểm tra đơn vị, bây giờ bạn có thể giả lập trình bao bọc:
public void A_Run_ChangeStateOfX()
{
var moq = new Mock<IServiceAWrapper>();
moq.Setup(...);
}
Đây có thể không phải là phương pháp hay nhất, nhưng nếu các quy tắc dự án của bạn buộc bạn theo cách này, hãy làm điều đó. Đồng thời Đặt tất cả các Trình bao bọc của bạn bên trong dự án Kiểm tra đơn vị hoặc dự án Người trợ giúp chỉ được chỉ định cho các thử nghiệm đơn vị để không làm quá tải dự án với các trình bao bọc hoặc bộ điều hợp không cần thiết.
Cập nhật:
Câu trả lời này từ hơn một năm nhưng trong năm nay, tôi phải đối mặt với rất nhiều tình huống tương tự với các giải pháp khác nhau. Ví dụ: thật dễ dàng để sử dụng Microsoft Fake Framework để tạo ra các bản giả, hàng giả và sơ khai và thậm chí kiểm tra các phương pháp riêng tư và được bảo vệ mà không cần bất kỳ giao diện nào. Bạn có thể đọc: https://docs.microsoft.com/en-us/visualstudio/test/isolating-code-under-test-with-microsoft-fakes?view=vs-2017