[英]How to Mock a class which has private Constructor using Rhino Mocks
[英]Cannot mock class with constructor having array parameter using Rhino Mocks
我們無法在RhinoMocks中模擬此類。
public class Service
{
public Service(Command[] commands){}
}
public abstract class Command {}
// Code
var mock = MockRepository.GenerateMock<Service>(new Command[]{}); // or
mock = MockRepository.GenerateMock<Service>(null)
Rhino模擬無法抱怨找不到匹配參數的構造函數。 我究竟做錯了什么?
謝謝,
嘗試這樣:
var mock = MockRepository.GenerateMock<Service>(
new object[] { new Command[0] }
);
此外,您可以使用接口包裝Service,而不必擔心構造函數參數。 如果構造函數發生變化-您的測試將與這些實現細節相關聯,並且需要進行更新。
var mock = MockRepository.GenerateMock<IService>();
編輯:至少隔離了該Mock的創建,因此,如果您在Service上的構造函數發生了變化,則不必在每個地方都進行更新。 常見做法如下:
(在您的測試課程中)
private ObjectWithServiceDependency CreateObjectUnderTest(){
//Here you would inject your Service dependency with the above answer from Darin
//i.e.
var mockService= MockRepository.GenerateMock<Service>(new object[] {new Command[0] });
var objectUnderTest = new ObjectWithServiceDependency(mockService);
return objectUnderTest;
}
然后在測試中
[Test]
public TestSomething(){
var out = CreateObjectUnderTest();
//do testing
mockService.Expect(...);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.