c# - PrivateObject 找不到属性

标签 c# .net unit-testing mstest

我的结构基本上是这样的:

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

   private void DoSomething()
   {

       // ...

       DoSomethingSpecific();
   }

   protected abstract void DoSomethingSpecific();
}

由于复杂性,我需要对 DoSomething 方法进行单元测试,以确保它始终以相同的方式工作。这就是我创建以下 stub 的原因。

public class AStub : A
{
    protected override void DoSomethingSpecific()
    {
        // nothing to do
    }
}

我使用 PrivateObject 类来访问类 A 的方法和属性来实例化类 AStub。这工作了一段时间,但出于某种原因,每当我尝试访问该属性或方法时,现在都会崩溃。

测试代码如下:

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

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

// assert...

抛出的异常是 MissingMethodException,告诉我找不到属性或方法。但是当我调试和检查层次结构时,包括拼写在内的每一个似乎都是正确的。

感谢您的帮助。

最佳答案

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

var accessor = new PrivateObject(sut, new PrivateType(typeof(A)));

关于c# - PrivateObject 找不到属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4883944/

相关文章:

c# - 从类库添加 ASP.NET Controller / View

c# - Winforms 应用程序中的可怕 "Callback chains"

c# - 更改其他 Win32-dl​​l/exe 中的资源

Django 测试提示缺少表

c# - 将 Windows.Controls.UserControl 转换为 Windows.Forms.Control

c# - 未在 Azure 包中创建 Web.config

.net - 如何检查302响应? Web请求

javascript - 我在 mvc、LoadBooks、RequirementBooks 中有 2 个 View

angular - 如何使用 jasmine-karna 以 Angular 对嵌套函数进行单元测试

javascript - 如何在 Mocha 测试用例中发送 header ('Authorization' ,'Bearer token' )