我有一個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