【发布时间】:2011-02-03 08:46:11
【问题描述】:
我的结构基本上是这样的:
abstract class A
{
protected string Identificator { get; set; }
private void DoSomething()
{
// ...
DoSomethingSpecific();
}
protected abstract void DoSomethingSpecific();
}
由于复杂性,我需要对 DoSomething 方法进行单元测试,以确保它始终以相同的方式工作。这就是我创建以下存根的原因。
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,告诉我找不到属性或方法。但是当我调试和检查层次结构时,每个似乎都是正确的,包括拼写。
感谢您的帮助。
【问题讨论】:
-
我们是否应该假设
AStub不是从A继承的事实是问题中代码示例中的一个错字,并且它真的应该是public class AStub : A? -
对不起,你是对的,我错过了一些东西......
-
那么问题是您实际上没有从代码中的“A”继承还是您以其他方式解决了这个问题?
-
在“测试代码”中,
new CommonIodAdapterImpl()应该是new AStub()吗?
标签: c# .net unit-testing mstest