我正在尝试测试Caliburn.Micro方法,PublishOnUIThread()
被调用:
public static class EventAggregatorExtensions
{
...
public static void PublishOnUIThread(this IEventAggregator eventAggregator, object message);
...
}
我正试图像这样测试:
//assert
_eventAggregator.AssertWasCalled(x =>
x.PublishOnUIThread(Arg<object>
.Is.Anything));
但得到错误:
System.InvalidOperationException:使用
Arg<T>
时,所有参数 必须使用Arg<T>.Is, Arg<T>.Text, Arg<T>.List, Arg<T>.Ref or Arg<T>.Out
定义。预期有2个参数,1个已被定义。
但是,我不能强制该方法采用2个参数。我是新手测试所以我不确定如何解决这个问题。
答案 0 :(得分: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);
}
如您所知,PublishOnUIThread
是应用于调用void 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));