Tôi đã nhìn thấy nhiều câu trả lời liên quan đến 'cách phân tích các lớp học của bạn để bạn có thể kiểm soát những gì xảy ra trong SUT'.C# stubbing. Giao diện cho mọi đối tượng có thể thử nghiệm?
Họ nói một điều:
Tạo một giao diện và tiêm giao diện sử dụng dependency injection và tạo ra một sơ khai sử dụng giao diện tương tự mà bạn sau đó tiêm vào SUT.
Tuy nhiên, những gì tôi đã học được ở những nơi làm việc trước đây của tôi:
Nếu bạn kiểm tra đơn vị, bạn kiểm tra tất cả các lớp/chức năng.
Điều đó có nghĩa là đối với mỗi lớp có bố cục chức năng cụ thể bạn phải tạo giao diện?
Điều đó có nghĩa là số lượng lớp/tệp sẽ lớn hơn gấp đôi.
Như đã thấy trong ví dụ bên dưới, đây có phải là 'cách để đi' hay tôi thiếu điều gì đó trong quy trình thử nghiệm đơn vị của tôi không?
Lưu ý: Tôi đang sử dụng Express VS2012. Điều đó có nghĩa là không có khuôn khổ 'Faker'. Tôi đang sử dụng khung kiểm thử đơn vị VS2012 'chuẩn'.
Là một ví dụ rất, rất đơn giản, cho phép tôi phân phát từng giao diện được chuyển xuống SUT.
IFoo.cs
public interface IFoo
{
string GetName();
}
Foo.cs
public class Foo : IFoo
{
public string GetName()
{
return "logic goes here";
}
}
IBar.cs:
public interface IBar : IFoo
{
IFoo GetFoo();
}
Bar.cs:
public class Bar : IBar
{
public string GetName()
{
return "logic goes here";
}
public IFoo GetFoo()
{
return null; // some instance of IFoo
}
}
IBaz.cs:
public interface IBaz
{
IBar GetBar();
}
Baz.cs:
public class Baz
{
public IBar GetBar()
{
return null; // some instance of IBar
}
}
Lời khuyên của tôi: tìm một khung mocking tốt (Moq là một lựa chọn tốt) không yêu cầu bạn tạo tất cả các giao diện đó. –
Tôi sẽ xem xét khuôn khổ đó –
@RobertHarvey: Moq sẽ giúp tránh tạo ra các giao diện như thế nào? OP vẫn cần phải để lại điểm vào cho nó (Moq), có thể là thành viên ảo hoặc giao diện. –