[英]How to mock a protected method in base class using Rhino?
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模拟/存根Execute()
因为它是Protected。 我尝试创建一个实现ClassB的帮助程序类,并覆盖Execute()
以便对其进行模拟。 但是,然后出现错误“无效的调用,已使用了上次调用或未进行任何调用(请确保您正在调用虚拟(C#)/可重写(VB)方法)”。
任何帮助将不胜感激。
单元测试有暴露设计问题的习惯。
如果该成员可以重构为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();
//...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.