3
我在單元測試中註冊我的Unity 2類型時很困難。統一單元測試 - 註冊類型
下面是類的測試片段:
public class SomeService : ISomeService
{
private int SomeVar { get; set; }
[Dependency]
public ISessionManager SessionManager { get; set; }
public SomeService()
{
SomeVar = SessionManager.Get<int>("SomeVar");
}
}
下面是我在我的MSTest ClassInitialize方法:
private static ISomeService _someService;
private static IUnityContainer _unityContainer;
[ClassInitialize]
public static void MyClassInitialize(TestContext testContext)
{
var mockSessionManager = new Mock<ISessionManager>();
mockSessionManager.Setup(foo => foo.Get<int>(It.IsAny<string>())).Returns(1);
_unityContainer = new UnityContainer()
.RegisterInstance(mockSessionManager.Object)
.RegisterType<ISomeService, SomeService>(
new InjectionProperty("SessionManager"));
_someService = _unityContainer.Resolve<IAdditionalCoveragesService>();
}
對於每一個測試方法,我有,當我調試和步進入SomeService的構造函數,它說SessionManager爲空。我在嘗試在Unity中註冊我的類型時做錯了什麼?
注 - 我正在使用Moq來建立一個應該注入SomeService的模擬會話管理器。
謝謝!
對,但是我寧願沒有創建一個新的構造函數來設置SessionManager。是不可能在構造函數之前注入屬性? – 2010-09-10 11:15:07
如何在對象存在之前設置屬性?如果你不想添加一個構造函數,你可以把你的邏輯放在SessionManager的設置器中 – onof 2010-09-10 11:54:49
是的,你的SessionManager在構造函數,句點,DI容器中總是爲空。屬性不會那樣工作。 – 2010-09-11 23:42:15