我有一个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,而不是[服务定位器反面模式(HTTP://blog.ploeh。DK/2010/02/03/ServiceLocatorisanAnti-模式/)? – YuvShap
@SomeUser:是的,我认为ServiceLocator模式伤害了我,但我脑海中的问题是如何重写它?然后我发现[这个解决方案],我认为这将解决问题(http://stackoverflow.com/questions/7816769/injecting-an-ienumerable-into-a-constructor-with-a-ninject-factory-method)我有。 – Marshal