internal abstract class ClassB: IInterface
{
protected void Execute();
}
abstract class ClassA : ClassB
{
public void methodToUT()
{
---logic that I want to unit test----
Execute();
}
}
我想对methodToUT()
进行单元测试。但是,由于Rhino是受保护的,因此我无法使用Rhino模拟/存根Execute()
。我尝试创建
实现ClassB并覆盖Execute()
的帮助程序类,以便我可以对其进行模拟。但是,我然后得到错误
任何帮助将不胜感激。
答案 0 :(得分:3)
单元测试有暴露设计问题的习惯。
如果该成员可以重构为virtual
或abstract
abstract class ClassB: IInterface {
protected virtual void Execute();
}
,以便可以在派生类中覆盖它,然后
可以创建存根
public class StubClass: ClassA {
protected override void Execute() {
//...Do nothing
}
}
否则,如果无法覆盖所需的成员,则可以用new
关键字替换它。
public class StubClass: ClassA {
protected new void Execute() {
//...Do nothing
}
}
出于测试目的
//Arrange
var subject = new StubClass();
//Act
subject.methodToUT();
//...