簡體   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