我在单元测试中注册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为null。在尝试在Unity中注册我的类型时,我做错了什么?
注意 - 我正在使用Moq来设置一个应该注入SomeService的模拟会话管理器。
感谢!!!
答案 0 :(得分:2)
因为它是一个注入属性:属性在创建后设置。要在构造函数中使用SessionManager,您应该使用构造函数注入:
public class SomeService : ISomeService
{
private int SomeVar { get; set; }
public ISessionManager SessionManager { get; private set; }
public SomeService(ISessionManager sessionManager)
{
SessionManager = sessionManager;
SomeVar = SessionManager.Get<int>("SomeVar");
}
}
和:
_unityContainer = new UnityContainer()
.RegisterInstance(mockSessionManager.Object)
.RegisterType<ISomeService, SomeService>();