處理我使用的是Microsoft單元測試,並符合下列條件:單元測試對象,它的生命週期範圍由IoC容器
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 });
}
我使用IoC容器(簡單噴油器),其中處理對象的生存範圍。 Membus連接命令以命令處理程序,並通過IoC容器解析。
上述代碼運行並運行,命令處理程序將其局部變量設置爲true。
但是,由於Simple Injector處理壽命範圍,因此我不能要求簡單噴射器爲AccountCommandHandler
對象,因爲它會返回一個新對象,並將CreateAccountCommandWasCalled
設置爲false。
單元測試新手除了將CreateAccountCommandWasCalled
設置爲靜態變量之外,什麼樣的測試更加穩健?
好吧,這個答案更像是一個關於單元測試的大嚷嚷,而不是回答你的具體問題,對不起!希望有人發現它有用的一天:) – GrahamMc 2013-04-25 08:48:45
我同意你在這裏說,但我覺得OP實際上正在編寫一個集成測試來驗證系統是否能正常工作。在這幾個案例中,你實際上想要測試基礎設施,包括你的IoC容器和Membus。您應該可以進行一些測試,但這些測試非常重要。 – Steven 2013-04-25 09:02:34
@Steven同意! – GrahamMc 2013-04-25 13:32:49