저는 ViewModel을 가지고 있습니다. 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
의 생성자를 수정하여 목록을 초기화 할 수 있습니다. 다시 말해서 테스트 할 수 있습니까?
감사합니다.
[service locator anti pattern] (http : //blog.ploeh.) 대신 DI와 함께 IoC를 사용하는 것이 더 좋지 않습니까?dk/2010/02/03/ServiceLocatorisanAnti-Pattern /)? – YuvShap
@SomeUser : 네, ServiceLocator 패턴이 저를 해치는 것 같았습니다.하지만 내 마음 속의 질문은 그것을 다시 작성하는 방법 이었습니까? 그런 다음 문제를 해결할 것이라고 생각하는 [이 해결책] (http://stackoverflow.com/questions/7816769/injecting-an-ienumerable-into-a-constructor-with-a-inject-factory-method)을 발견했습니다. 나는 가지고있다. – Marshal