[英]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.