2
我正在研究使用依賴注入來處理一些大量的DI框架。我試圖嘗試單元測試目前使用Autofac作爲DI容器的一些類。使用Autofac測試代表工廠
比方說,我有這個類...
public class SaveUserCommand : DBCommandBase<UserImpl>
{
public delegate SaveUserCommand Factory(UserImpl impl);
private UserImpl impl;
private IAuditableHelper helper;
public SaveUserCommand(UserImpl impl, IAuditableHelper helper)
{
this.impl = impl;
this.helper = helper;
}
public override UserImpl Execute(object dataTrans)
{
return this.impl;
}
}
^命令結構化業務層BTW。
我以這種方式依賴於上面的命令另一命令
public class SaveSpecialUserCommand : DBCommandBase<UserImpl>
{
public delegate SaveSpecialUserCommand Factory(UserImpl user);
private UserImpl user;
SaveUserCommand.Factory saveUserCommand;
public SaveSpecialUserCommand(UserImpl user, SaveUserCommand.Factory saveUserCommand)
{
this.user = user;
this.saveUserCommand = saveUserCommand;
}
public override UserImpl Execute(object dataTrans)
{
this.user.IsSpecial = true;
this.saveUserCommand(this.user).Execute(dataTrans);
return this.user;
}
}
使用Autofac,它解決所有的依賴在SaveSpecialUserCommand
。
我不確定的是我如何進行單元測試或向SaveUserCommand.Factory
代表注入模擬代碼。
提示會很好。我仍然想弄明白,但一個大方向將會很棒。
編輯
只要添加一個簡單的測試案例展示我不想使用Autofac在我的單元測試創建我的命令。
[Test]
public void SomeSimpleTestTest()
{
var user = new UserImpl();
var command = new SaveSpecialUserCommand(user, /*This is what I need to mock. SaveUserCommand.Factory*/null);
var retVal = command.Execute(this._mockTransaction);
Assert.IsNotNull(retVal);
Assert.IsTrue(retVal.IsSpecial);
}
那麼,我沒有計劃讓Autofac爲單元測試創建我的命令。我將用我正在嘗試*的測試用例進行編輯。 – DavidAndroidDev 2012-03-22 11:57:59
嗯...除非你建議我在我的單元測試中使用我的DI容器,並將模擬器放置在容器中以用於測試用例? – DavidAndroidDev 2012-03-22 12:03:49
不,我的印象是你*在你的單元測試中使用了一個容器。然後看到我更新的答案。 – 2012-03-22 13:19:03