PrivateObject找不到属性

Her*_*sch 4 .net c# unit-testing mstest

我有一个基本上像这样的结构:

abstract class A
{
   protected string Identificator { get; set; }

   private void DoSomething()
   {

       // ...

       DoSomethingSpecific();
   }

   protected abstract void DoSomethingSpecific();
}
Run Code Online (Sandbox Code Playgroud)

由于我需要的复杂性,我们需要对DoSomething方法进行单元测试,以确保它以相同的方式运行.这就是我创建以下存根的原因.

public class AStub : A
{
    protected override void DoSomethingSpecific()
    {
        // nothing to do
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用PrivateObject类来访问类A的方法和属性,实例化类AStub.这工作了一段时间,并且由于某种原因,每当我尝试访问属性或方法时崩溃.

以下代码用于测试:

var sut = new CommonIodAdapterImpl();
var accessor = new PrivateObject(sut);

accessor.SetProperty("Identificator", "blablub");
accessor.Invoke("DoSomething", null);

// assert...
Run Code Online (Sandbox Code Playgroud)

引发的异常是MissingMethodException,告诉我没有找到属性或方法.但是当我调试并检查层次结构时,每个似乎都是正确的拼写.

谢谢您的帮助.

Rob*_*ick 11

您需要将PrivateType参数设置为基类以访问该级别的私有成员.

var accessor = new PrivateObject(sut, new PrivateType(typeof(A)));
Run Code Online (Sandbox Code Playgroud)