如何从模拟对象 return DispatcherOperation<T>
How to I return a DispatcherOperation<T> from mocked object
我有一个方法 return DispatcherOperation<TResult>
对象:
public DispatcherOperation<TResult> InvokeAsync<TResult>(Func<TResult> callback)
{
return this.UIDispatcher.InvokeAsync(callback);
}
它在应用程序中的使用方式:
var res = await this.dispatcher.InvokeAsync(() =>
{
// returns a List<string> by computing some logic
});
而且我已经使用最小起订量模拟了这个方法:
this.mockDispatcher.Setup(x => x.InvokeAsync(It.IsAny<Func<List<string>>())).Callback((Func<List<string>> callback) => callback.Invoke());
但问题是调用方法不等待响应并以空异常结束。
我知道回调不应该用于 return 值,但我无法找出一个 return 方法可以 return 类型 DispatcherOperation<T>
这是我正在尝试的:
this.mockDispatcher.Setup(x => x.InvokeAsync(It.IsAny<Func<List<string>>>())).Returns((Func<List<string>> callback) => callback()));
我如何return它作为DispatcherOperation<List<string>>
您可以很容易地模拟 Task<T>
:
public Task<TResult> InvokeAsync<TResult>(Func<TResult> callback)
{
return this.UIDispatcher.InvokeAsync(callback).Task;
}
this.mockDispatcher.Setup(x => x.InvokeAsync(It.IsAny<Func<List<string>>())).Callback((Func<List<string>> callback) => Task.FromResult(callback.Invoke()));
模拟像 Task<T>
这样的通用类型比像 DispatcherOperation<TResult>
这样的框架特定类型要容易得多。但是,如果您 必须 使用 DispatcherOperation<TResult>
,您还可以选择创建一个测试 Dispatcher
实例(并执行所有消息泵送和必要的事情)像那样更重的模拟)。
我有一个方法 return DispatcherOperation<TResult>
对象:
public DispatcherOperation<TResult> InvokeAsync<TResult>(Func<TResult> callback)
{
return this.UIDispatcher.InvokeAsync(callback);
}
它在应用程序中的使用方式:
var res = await this.dispatcher.InvokeAsync(() =>
{
// returns a List<string> by computing some logic
});
而且我已经使用最小起订量模拟了这个方法:
this.mockDispatcher.Setup(x => x.InvokeAsync(It.IsAny<Func<List<string>>())).Callback((Func<List<string>> callback) => callback.Invoke());
但问题是调用方法不等待响应并以空异常结束。
我知道回调不应该用于 return 值,但我无法找出一个 return 方法可以 return 类型 DispatcherOperation<T>
这是我正在尝试的:
this.mockDispatcher.Setup(x => x.InvokeAsync(It.IsAny<Func<List<string>>>())).Returns((Func<List<string>> callback) => callback()));
我如何return它作为DispatcherOperation<List<string>>
您可以很容易地模拟 Task<T>
:
public Task<TResult> InvokeAsync<TResult>(Func<TResult> callback)
{
return this.UIDispatcher.InvokeAsync(callback).Task;
}
this.mockDispatcher.Setup(x => x.InvokeAsync(It.IsAny<Func<List<string>>())).Callback((Func<List<string>> callback) => Task.FromResult(callback.Invoke()));
模拟像 Task<T>
这样的通用类型比像 DispatcherOperation<TResult>
这样的框架特定类型要容易得多。但是,如果您 必须 使用 DispatcherOperation<TResult>
,您还可以选择创建一个测试 Dispatcher
实例(并执行所有消息泵送和必要的事情)像那样更重的模拟)。