2014-10-22 2 views
1

내 뷰 모델에 대한 단위 테스트를 작성하려고하는데 다음과 같은 문제가 발생합니다. 일부 문제는 서비스 로케이터를 잘못 사용하고있는 것일 수 있지만 여기에 설명되어 있습니다. 나는이보기 모델에 대한 단위 테스트를하고 싶습니다 여러 공용 속성과 공공 방법이 그래서 난 '... 있습니다MVVM에서 뷰 모델을 테스트하기 위해 서비스 로케이터를 설정하는 방법

public class TestViewModel : ViewModelBase 
{ 
    private RelayCommand ...; 
    private RelayCommand ...; 
    private ObservableCollection<Test> _list; 
    private IRepository<Test> _testRepository; 

    public TestViewModel() 
    { 
     //Get the repository 
     _tenderRepository = ServiceLocator.Current.GetInstance<IRepository<Test>>(); 

     //do a get on the repository and load it onto a list 
     LoadTestData() 
    } 
      ... 
} 

: 여기

는 (내 저장소를 등록 MVVM 빛 IOC 사용) 내 코드입니다 이 방법을 설정 M :

[TestFixture] 
public class VMTests 
{ 
    TestViewModel _vm; 

    [SetUp] 
    public void RunBeforeAllFixtures() 
    { 
     _vm = new TestViewModel(); 
    } 

    [Test()] 
    public void PublicMethod() 
    { 
     ... 
    } 
} 

내가 "ServiceLocationProvider가를 설정해야합니다"라고 말하는 시험 엔진에서 오류가납니다을 내가 테스트를 실행 시도 할 때. 즉, 테스트 프로젝트에서 VM 인스턴스를 선택하기 전에 테스트 프로젝트에서 mock (또는 테스트 공급자)을 등록해야합니다.

답변

2

방법도

[SetUp] 
    public void RunBeforeAllFixtures() 
     { 
      ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 
      _vm = new TestViewModel(); 

     } 

및 IRepository '테스트'

을 조롱하고 등록

에 대한