繁体   English   中英

如何使用Rhino在基类中模拟受保护的方法?

[英]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)方法)”。

任何帮助将不胜感激。

单元测试有暴露设计问题的习惯。

如果该成员可以重构为virtualabstract

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM