使用Moq模拟异步静态方法

时间:2018-05-14 10:11:20

标签: c# asynchronous moq static-methods

到目前为止,我已经能够通过将其签名更改为(伪)

来模拟静态方法
public static Func<TResult> Foo = () => { return TResult; };

然后在测试中我可以通过

来模拟它
MyClass.Foo = () => new TResult();

我现在面临一个新问题。

有一种签名方法如下:

public static async Task<TResult> FooBar(string obj1, string obj2)

我已将其更改为

public static Func<string, string, Task<TResult>> FooBar = async (obj1, obj2)

这很好地编译,但我没有把它编译为测试。

MyClass.FooBar(It.IsAny<string>(), It.IsAny<string>()) => Task.FromResult(new TResult());

我知道我应该等待整个电话的某个地方,但它只是不会让步。 现在嘲笑这个代表的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

这对你有用吗?

MyClass.FooBar = (string obj1, string obj2) => Task.FromResult(new TResult());

注意:不确定你的TResult来自哪里,但因为在C#中不可能有泛型函数的实例,所以你的TResult必须是&#34;已知&#34;在撰写模拟时,即

public static Func<string, string, Task<int>> Foo = Bar<int>;            
public static async Task<TResult> Bar<TResult>(string obj1, string obj2) where TResult : new()
    => await Task.FromResult(new TResult());