jok*_*efe 58 c# reflection async-await windows-runtime
我正在为WinRT应用程序编写单元测试,并且我能够使用以下方法调用非异步私有方法:
TheObjectClass theObject = new TheObjectClass();
Type objType = typeof(TheObjectClass);
objType.GetTypeInfo()
.GetDeclaredMethod("ThePrivateMethod")
.Invoke(theObject, null);
Run Code Online (Sandbox Code Playgroud)
但是,如果有问题的私有方法是async,代码将继续执行而不等待它完成.
如何await为此添加功能?
Jon*_*eet 101
那么你需要使用方法返回的值.你知道那种吗?例如,如果它始终是a Task,您可以使用:
await (Task) objType.GetTypeInfo()
.GetDeclaredMethod("ThePrivateMethod")
.Invoke(theObject, null);
Run Code Online (Sandbox Code Playgroud)
如果您不知道返回类型但知道它将是等待的,您可以使用动态类型:
await (dynamic) objType.GetTypeInfo()
.GetDeclaredMethod("ThePrivateMethod")
.Invoke(theObject, null);
Run Code Online (Sandbox Code Playgroud)
我会尽量避免在你的单元测试中通过反射调用私有方法.你可以通过公共(或内部)API间接测试吗?这通常是可取的.
Invoke应该返回一个可转换为的对象Task.就是await这样.
如果您的私有方法返回void,那么您将需要一个SynchronizationContext杂乱的自定义.让你的方法返回Task/ 更好Task<T>.
| 归档时间: |
|
| 查看次数: |
20334 次 |
| 最近记录: |