Мы не можем дразнить этот класс в 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)
Носорог дразнит сбои, жалуясь, что он не может найти конструктора с соответствием аргументам. Что я делаю неправильно?
Спасибо,
Попробуйте так:
var mock = MockRepository.GenerateMock<Service>(
new object[] { new Command[0] }
);
Кроме того, вы можете обернуть Service интерфейсом и не беспокоиться об аргументах конструктора. Если конструктор когда-либо изменится - ваши тесты будут привязаны к этим деталям реализации и их необходимо обновить.
var mock = MockRepository.GenerateMock<IService>();
Edit: по крайней мере, изолировать создание этого 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(...);
}