Tôi đang sử dụng Microsoft Unit Test và đã điều sau đây:Đơn vị có đời phạm vi được xử lý bởi IoC container
public class AccountCommandHandlers :
Handler<CreateAccountCommand>,
Handler<CloseAccountCommand>
{
public bool CreateAccountCommandWasCalled = false;
public bool CloseAccountCommandWasCalled = false;
public void Handle(CreateAccountCommand command)
{
CreateAccountCommandWasCalled = true;
}
public void Handle(CloseAccountCommand command)
{
CloseAccountCommandWasCalled = true;
}
}
[TestMethod]
public void CanRaiseInternalHandlers()
{
var iocContainer = SimpleInjectorWiringForMembus.Instance;
iocContainer.Bootstrap(
AppDomain.CurrentDomain.GetAssemblies());
var membus = MembusWiring.Instance;
membus.Bootstrap();
membus.Bus.Publish(new CreateAccountCommand() { Id = 100 });
membus.Bus.Publish(new CloseAccountCommand() { Id = 100 });
}
Tôi đang sử dụng một container IoC (Simple Injector) mà xử lý phạm vi tuổi thọ của các đối tượng. Membus nối các lệnh để xử lý lệnh và giải quyết thông qua vùng chứa IoC.
Mã trên chạy và hoạt động và trình xử lý lệnh đặt các biến cục bộ của họ thành true.
Tuy nhiên, vì Injector đơn giản xử lý phạm vi thời gian, tôi không thể yêu cầu Simple Injector cho đối tượng AccountCommandHandler
vì nó sẽ trả về một đối tượng mới với CreateAccountCommandWasCalled
được đặt thành false.
Làm mới để kiểm tra đơn vị điều gì sẽ là một cách mạnh mẽ hơn để kiểm tra khác hơn là thiết lập CreateAccountCommandWasCalled
làm biến tĩnh?
Ok câu trả lời này giống như câu trả lời lớn về thử nghiệm đơn vị hơn là câu trả lời cho câu hỏi rất cụ thể của bạn, xin lỗi! Hy vọng ai đó thấy nó hữu ích một ngày nào đó :) – GrahamMc
Tôi đồng ý với những gì bạn nói ở đây, nhưng tôi có cảm giác rằng OP thực sự đang viết một bài kiểm tra tích hợp để xác minh xem hệ thống có hoạt động chính xác hay không. Trong vài trường hợp này, bạn thực sự muốn thử nghiệm cơ sở hạ tầng bao gồm cả thùng chứa IoC của bạn và bao gồm cả Membus. Bạn có lẽ nên có một số ít các bài kiểm tra đó, nhưng tuy nhiên những bài kiểm tra đó rất quan trọng. – Steven
@Steven đồng ý! – GrahamMc