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