2010-07-20 4 views
1

제 질문은 다음과 같습니다. 모의 객체에서 ICommand의 Execute 메소드가 호출되었는지 어떻게 테스트 할 수 있습니까? 내가 너무 UCOperandViewModel에 EditCommand ICommand의를 가지고 여기에 지정해야하고 내가 EditCommand.Execute를 호출 할 때 그 ICommand의 실행됩니다 있는지 여부를 테스트 할ICommand가 실행되었는지 테스트하십시오.

var mockOperandVM = new Mock<UCOperandViewModel>(); 
mockOperandVM.Setup (x => x.EditCommand).Returns (new RelayCommand<String> (x => { })); 

var toolbarTrayVM = new UCToolbarTrayViewModel (mockComponentsLocator.Object); 
toolbarTrayVM.EditCommand.Execute ("Edit"); 
mockOperandVM.Verify (x => x.EditCommand.Execute ("Edit"), "EditCommand with 'Edit' parameter was not executed on the mock object."); 

:

나는 다음과 같은 코드를 사용하고 있습니다 toolbarTrayVM에 있습니다.

Verify를 호출 할 때 ArgumentException이 발생합니다. "주어진 인수에 대한 일치하는 생성자가 조롱 된 유형에서 발견되지 않았습니다."

미리 감사드립니다.

+0

더 많은 코드를 제공해 주시겠습니까? ICommand, 샘플 테스트 코드 및 테스트하려는 항목을 어떻게 사용하고 있습니까? –

+0

어떤 조롱 프레임 워크를 사용하고 있습니까? –

+0

저는 Moq 프레임 워크를 사용하고 있습니다. – Zoliqa

답변

1

SUT - 바람직하게는 생성자 삽입을 사용하여 서비스를 주입하십시오. 그러면 다음과 같은 단위 테스트 코드를 작성할 수 있습니다.

var mock = new Mock<IService>(); 

var sut = new MyViewModel(mock.Object); 
sut.SomeCommand.Execute(null); 

mock.Verify(s => s.Foo()); 

이 예제에서는 Moq을 사용합니다.

+1

자세한 내용을 제공해 주시겠습니까? IService 란 무엇입니까? 푸()? – droughtrain

+0

그것은 db에 대한 종속 인터페이스, 서비스입니다. 당신은 당신의 뷰 모델을 삽입 할 수 있도록 그것을 조롱해야합니다. –