我有一个执行异步服务调用的方法。我通过传递回调来调用这个类。
public void GetRights(EventHandler<GetRightsCompletedEventArgs> callback)
{
ServiceClient client = new ServiceClient();
client.GetRightsCompleted += new EventHandler<GetRightsCompletedEventArgs>(callback);
client.GetRightsAsync();
}
GetRights(GetRightsCallback);
我正在使用MSTest创建测试,并且我在Moq中模拟了包含类(IGetRightsProxy)。在测试中调用此方法时,如何调用回调?
GetRightsForCurrentUserCompletedEventArgs results =
new GetRightsCompletedEventArgs(
new object[] { new ObservableCollection<Right>()}, null, false, null);
Mock<IGetRightsProxy> MockIGetRightsProxy = new Mock<GetRightsProxy>();
答案 0 :(得分:0)
实现我想要的一种方法是像这样扩展类:
class MockGetRightsProxy : IGetRightsProxy
{
public void GetRights(EventHandler<GetRightsCompletedEventArgs> callback)
{
// Create some args here
GetRightsCompletedEventArgs args = new GetRightsCompletedEventArgs(
new object[] { new ObservableCollection<Right>() }, null, false, null);
callback(null, args);
}
}
我一直在寻找在Moq中调用回调的方法,但这也有效。
答案 1 :(得分:0)
您希望在模拟中查看Moq的Callback()
扩展名;
Mock<IGetRightsProxy> mock = new Mock<IGetRightsProxy>();
mock.Setup(x => x.GetRights(It.IsAny<EventHandler<GetRightsCompletedEventArgs>>())
.Callback<EventHandler<GetRightsCompletedEventArgs>>(
callback => callback(mock.Object, new GetRightsCompletedEventArgs())
);
当被测代码在GetRights()
模拟器上调用IGetRightsProxy
时,它传入的实际EventHandler<GetRightsCompletedEventArgs>
将随后传递到Moq的Callback()
方法。
注意:类型推断将适用于应用于Callback()
的泛型,但我发现在这些情况下,显式定义传递给方法的类型更具可读性。