2010-08-01 6 views
5

단위 테스트에서 Moq를 사용하여 테스트중인 클래스가 원하는 방식으로 작동하는지 확인하는 방법에 대한 조언이 필요합니다. 테스트중인 클래스가 Prism (이벤트 통합 자) 이벤트를 게시하고이 테스트가 내 테스트에서 제기되었다고 주장 할 수있는 방법이 필요합니다.유닛 테스트를 위해 Moq를 사용하여 프리즘 이벤트 수집기를 사용하십시오.

직장에서 많은 리소스가 없으며이를 설정하는 방법을 알기가 어렵습니다.

내가 가지고있다 -

public SomeEvent : CompositePresentationEvent<SomeEvent> 
{ 
    EventPayload 
} 

public SomeClass 
{ 
    void Allocate(){EventAggregator.Publish<SomeEvent>} 
} 

public SomeService : IService 
{ 
    SomeService(){ EventAggregator.Subscribe<SomeEvent>(DoSomething)} 
    void DoSomething(SomeEvent evt){} 
} 

내 테스트 SomeClass에 대한 경우 내가 SomeClass.Allocate를 호출 할 경우 SomeEvent 메시지가 게시되어 있는지 확인해야한다고 생각합니다. 어떻게 이뤄지나요?

또한 조롱 된 SomeService가 SomeEvent를 수신하는지 확인해야합니까? 아니면 SomeClvice가 아닌 SomeService unit test에 속하는 별도의 단위 테스트입니까?

어떤 경우에도이 설정 방법을 잘 모를 경우 조언을 제공해 주시면 감사하겠습니다.

답변

8

당신은 당신이 테스트 중에 모의를 제공 할 수있는 IEventAggregatorSomeClass를 제공 할 것입니다 :

public SomeClass(IEventAggregator eventAggregator) 
{ 
    _eventAggregator = eventAggregator; 
} 

그런 다음 테스트는 다음과 같이 보일 것입니다 :

var fakeEventAggregator = new Mock<IEventAggregator>(); 
var fakeEvent = new Mock<SomeEvent>(); 

fakeEventAggregator. 
    Setup(x => x.GetEvent<SomeEvent>()). 
    Returns(fakeEvent.Object); 

var test = new SomeClass(fakeEventAggregator.Object); 
test.Allocate(); 

fakeEvent.Verify(x => x.Publish(It.IsAny<SomeEventArgs>())); 

이러한 단위 인 경우 그런 다음 SomeService 테스트에서 전체적으로 개별적으로 구독을 테스트합니다. SomeClass이 이벤트를 올바르게 게시하고 처리 할 이벤트가 제공 될 때 SomeService이 올바르게 작동하는지 테스트하고 있습니다.

+0

IEventAggregator에 대한 종속성이 SomeClass 생성자 중에 삽입되므로이 예제에서는 "생성자 종속성 주입"을 사용합니다. –

+0

위대한 대답은, 이것이 많은 도움이되었습니다. – user630190

관련 문제