簡體   English   中英

使用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將需要您為任何非空構造函數提供參數,因為它不會有任何線索如何構建它們。

我的錯誤是我試圖將空值傳遞給CreateMockGenerateMock調用,一旦我為構造函數生成了一個非null參數,創建模擬或存根的調用就開始工作了。

您必須在DynamicMock<T>語句之后傳遞它們,該語句將參數數組作為參數。 不幸的是,它沒有類型檢查,但是如果你將你的參數與簽名匹配,它將調用適當的構造函數。

例如:

var myMock = MockRepository.DynamicMock<MyClassWithVirtuals>(int x, myObj y);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM