C#通过从另一个类反射获得私有方法并调用它

时间:2018-10-16 18:23:34

标签: c# .net reflection nunit

在Java中,您可以像这样调用私有方法:

Method m = obj.getClass().getDeclaredMethod("foo", null); 
m.setAccessible(true);
m.invoke("bar");

C#中的等效项是什么?我需要在单元测试中调用私有方法。

1 个答案:

答案 0 :(得分:1)

如果有权访问MSTest Framework,则可以创建一个PrivateObject实例,该实例是一个包装器,可用于访问对象实例的私有方法和字段。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.testtools.unittesting.privateobject?redirectedfrom=MSDN&view=mstest-net-1.2.0

您可以使用PrivateObject.Invoke()方法从有问题的对象中调用私有方法。

作为旁注,有时必须访问私有方法才能进行单元测试,这被认为是不好的做法。我知道这并不总是可能的,但是您也应该考虑重新评估代码体系结构,使其对UnitTest更友好,从而不需要这种解决方法。