如何使用Reflection调用类型为“private async Task”的方法

时间:2017-03-18 19:39:20

标签: c# .net unit-testing reflection

我有一个名为PageProcessor的类,其方法为

private static async Task InsertPosts(IEnumerable<LrcPost> posts)
{
   // ...
}

我试图在我的单位测试中调用它,如

PageProcessor processor = new PageProcessor();
MethodInfo dynMethod = processor.GetType()
    .GetMethod
    (
        "InsertPosts",
        BindingFlags.NonPublic | BindingFlags.Instance
    );

dynMethod.Invoke(处理器,新对象[] {posts});

但我正在获得NRE。知道为什么吗?

1 个答案:

答案 0 :(得分:3)

当您尝试访问它时,方法info为null,因为它是静态成员而不是实例成员。

以静态成员而非实例成员的身份访问该方法。另外,因为它是静态的,所以不需要实例来调用方法。

var type = typeof(PageProcessor);
var method = type.GetMethod("InsertPosts", BindingFlags.NonPublic | BindingFlags.Static);
var task = method.Invoke(null, new object[] { posts }) as Task;