【发布时间】:2016-12-12 22:53:52
【问题描述】:
我有一个 ViewModel,它在初始化时会创建一个对象列表。这些对象是通过从 IoC 解析接口实现来创建的。
视图模型
public class ApplianceViewModel : IAppliance
{
private List<IHardware> HardwareItems {get; set;}
public ApplianceViewModel()
{
HardwareItems = new List<IHardware>();
var hardware1 = Constants.Kernel.Get<IHardware>();
var hardware2 = Constants.Kernel.Get<IHardware>();
HardwareItems.Add(hardware1);
HardwareItems.Add(hardware2);
}
}
单元测试
[TestClass]
public class ApplicanceViewModelTest
{
[TestMethod]
public void TestSomething()
{
//Arrange
var appliance = new ApplianceViewModel(); //This would fail to construct
}
}
上述初始化将失败,因为kernel 将为空。基本上,它告诉我拥有一个常量类并直接访问内核是一个糟糕的设计。
但是我将如何修改我的viewmodel 的构造函数以便我可以初始化一个列表,换句话说,使它可测试?
谢谢。
【问题讨论】:
-
将 IoC 与 DI 结合使用而不是 service locator anti pattern 会更好吗?
-
@SomeUser:是的,我认为 ServiceLocator 模式对我造成了伤害,但我心中的问题是如何重写它?然后我找到了this solution,我认为这可以解决我遇到的问题。
标签: c# wpf unit-testing mvvm ninject