У меня есть ViewModel, который при инициализации создает список объектов. Эти объекты создаются путем разрешения реализации интерфейса из IoC.Как я должен проверить это?
ViewModel
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);
}
}
Test Unit
[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.дк/2010/02/03/ServiceLocatorisanAnti-Pattern /)? – YuvShap
@SomeUser: Да, я считаю, что шаблон ServiceLocator вредит мне, но вопрос в моем уме заключался в том, как его переписать? Затем я нашел [это решение] (http://stackoverflow.com/questions/7816769/injecting-an-ienumerable-into-a-constructor-with-a-ninject-factory-method), который, я думаю, разрешил бы проблему У меня есть. – Marshal