我的结构基本上是这样的:
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/