2017-02-15 2 views
2

있을 때 AssertWasCalled내가 Caliburn.Micro 방법은, <code>PublishOnUIThread()</code>가 호출하는지 테스트하기 위해 노력하고는 "이"매개 변수

//assert 
_eventAggregator.AssertWasCalled(x => 
x.PublishOnUIThread(Arg<object> 
.Is.Anything)); 

을하지만, 오류 :

System.InvalidOperationException : When using Arg<T> , all arguments must be defined using Arg<T>.Is, Arg<T>.Text, Arg<T>.List, Arg<T>.Ref or Arg<T>.Out . 2 arguments expected, 1 have been defined.

그러나 2 개의 매개 변수를 사용하도록 강제 할 수 없습니다. 나는이 문제를 해결하는 방법을 모르기 때문에 테스트를 처음 사용하기에 익숙하다.

+2

Rhino에서 확장 방법을 조롱하는 것은 불가능합니다. http://stackoverflow.com/a/5488700/368552 인터페이스에서 래핑하고 인터페이스를 조롱 할 수 있습니다. –

답변

2

프레임 워크 문서에 따르면 The Event Aggregator은 다음과 같이 정의됩니다.

public interface IEventAggregator { 
    bool HandlerExistsFor(Type messageType); 
    void Subscribe(object subscriber); 
    void Unsubscribe(object subscriber); 
    void Publish(object message, Action<Action> marshal); 
} 

당신이 이미 알고있는 바와 같이, PublishOnUIThreadvoid Publish(object message, Action<Action> marshal); 메소드를 호출 인터페이스에 적용되는 Event Aggregator Extension 방법이다.

이 경우 확장 메서드를 조롱 할 수 없으므로 이벤트 게시를 테스트 할 때 해당 메서드 (IEventAggregator.Publish)를 지정할 수 있습니다.

//assert 
_eventAggregator.AssertWasCalled(x => 
x.Publish(Arg<object>.Is.Anything, Arg<Action<Action>>.Is.Anything)); 
관련 문제