【发布时间】:2018-05-14 10:11:20
【问题描述】:
到目前为止,我已经能够通过将其签名更改为(伪)之类的东西来模拟静态方法
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());
我知道我应该将 await 放在整个通话中的某个位置,但它就是不会让步。 现在嘲笑这个代表的正确方法应该是什么?
【问题讨论】:
-
模拟静态方法是通往地狱世界的大门。如果您正在进行单元测试,请正确使用依赖注入。根本不要使用静态方法,因为它们定义了静态依赖项。如果必须,请使用
HttpContextWrapper之类的包装类。
标签: c# asynchronous moq static-methods