[英]How do you stub a method that accepts an IEnumerable in RhinoMocks?
[英]Using RhinoMocks, how do you mock or stub a concrete class without an empty constructor?
當你在一個類上有一個空的構造函數時,使用Rhino Mocks模擬一個具體的類似乎很容易:
public class MyClass{
public MyClass() {}
}
但是如果我添加一個帶參數的構造函數並刪除不帶參數的構造函數:
public class MyClass{
public MyClass(MyOtherClass instance) {}
}
我傾向於得到一個例外:
System.MissingMethodException:找不到具有匹配參數的構造函數
我已經嘗試在我對Mock或Stub的調用中輸入空值,但它不起作用。
我可以創建缺少無參數構造函數的具體類的模擬和存根嗎?
是的。 只需傳入StrictMock()
調用中的參數:
// New FruitBasket that can hold 50 fruits.
MockRepository mocks = new MockRepository();
FruitBasket basket = mocks.StrictMock<FruitBasket>(50);
如果你模擬一個沒有空/默認構造函數的具體類,那么Rhino Mocks將不得不使用其他任何可用的構造函數。 Rhino將需要您為任何非空構造函數提供參數,因為它不會有任何線索如何構建它們。
我的錯誤是我試圖將空值傳遞給CreateMock
或GenerateMock
調用,一旦我為構造函數生成了一個非null參數,創建模擬或存根的調用就開始工作了。
您必須在DynamicMock<T>
語句之后傳遞它們,該語句將參數數組作為參數。 不幸的是,它沒有類型檢查,但是如果你將你的參數與簽名匹配,它將調用適當的構造函數。
例如:
var myMock = MockRepository.DynamicMock<MyClassWithVirtuals>(int x, myObj y);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.