2011-10-14 2 views
0

클래스가있어서 내 인터페이스가 더 있습니다. 그것은 내 인터페이스에서 노출시키지 않은 속성을 가지고 있습니다.스텁 콘크리트 클래스에 있지만 유닛 테스트 용 인터페이스에는없는 속성을 스텁합니다.

public interface IViewResolver 
{ 
    object GetViewFor(string viewName); 

} 

이제 해당 인터페이스를 기반으로하는 MefViewResolver를 구현하고 싶습니다.

public class ViewResolver : IViewResolver 
{ 


    [ImportMany] 
    public IEnumerable<Lazy<IView,IViewMetaData>> Views { get; set; } 



    public object GetViewFor(string viewName) 
    { 
     var view = Views.Where(x => x.Metadata.Name == viewName).FirstOrDefault(); 

     return view == null ? null : view.Value; 
    } 

} 

내 SUT는 mefViewResolver로로드 된 생성자 주입 당 IResolver를 가져옵니다. 내 단위 테스트에서 미리 설정하거나 내 인터페이스에서 특정 mef 또는 mef를 사용하지 않고 외부에서 Views 속성을 설정하고 싶습니다. 기본적으로 예상 값으로 뷰를 설정하고 IViewResolver를 사용하는 my viewmodel이 사전 설정 뷰를 반환하는지 확인하려고합니다 ... 내 인터페이스에 뷰 속성이 없더라도 어떻게 스텁 할 수 있습니까?

내가 잘못된 길을 생각하면 ... 어떤 수정이 훨씬 appriciated 것입니다 ..

감사 D.

답변

2

당신은의 인식 당신의 ViewModel (아닌 확인자), 테스트하려면 IViewResolver 인터페이스를 사용하면 아무런 문제가 없어야합니다. 제공된 코드에 따라 ViewModel에서 액세스 할 수있는 유일한 방법은 GetViewFor입니다. 뷰 이름이 주어지면 각 테스트 케이스에 대해 적절한 뷰를 리턴하면됩니다. 그것은 단지 쿼리이며 주장에 대한이 있기 때문에, 당신은 대신 기대를 만드는 Stub``에 viewResolverMock.GetViewFor 호출 (...)를 할 수 있습니다

// Arrange the test objects 
var viewResolverMock = MockRepository.GenerateMock<IViewResolver>(); 
viewResolverMock.Stub(x => x. GetViewFor(thisTestViewName).Return(thisTestView); 
var myViewModel = new MyViewModel(viewResolverMock); 

// Do the actual operation on your tested object (the view model) 
var actualResult = myViewModel.DoSomethingWithTheView(); 

// Assert 
AssertAreEqual(expectedResult, actualResult); 
+1

: RhinoMocks 그것은 뭔가를해야한다 IViewResolver에 의존하는 것으로 간주되는 MyViewModel.DoSometingWithTheView()의 결과입니다. –

+0

좋은 지적, 고마워. –

+0

머리를 주셔서 감사합니다. 한 번에 2 개의 생각을 테스트하려고합니다. 나는 독립적으로 mefviewresolver를 테스트해야하며 내 뷰 모델 테스트에서 작동한다는 점에 의존해야합니다. 그걸로 내 GetViewFor를 걱정하지 않고 스텁 (stub) 할 수 있습니다 ... 다시 한번 감사드립니다 =) – silverfighter