Не удается смоделировать класс с конструктором, имеющим параметр массива, используя Rhino Mocks - PullRequest
5 голосов
/ 18 мая 2010

Мы не можем смоделировать этот класс в 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, жалуясь на то, что не может найти конструктор с совпадающими аргументами. Что я делаю не так?

Спасибо,

Ответы [ 2 ]

6 голосов
/ 18 мая 2010

Попробуй так:

var mock = MockRepository.GenerateMock<Service>(
    new object[] { new Command[0] }
);
0 голосов
/ 20 мая 2010

Кроме того, вы можете обернуть Service интерфейсом и не беспокоиться об аргументах конструктора.Если конструктор когда-либо изменится - ваши тесты будут привязаны к этим деталям реализации и должны быть обновлены.

var mock = MockRepository.GenerateMock<IService>();

Редактировать: по крайней мере изолировать создание этого макета, так что если ваш конструктор в 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(...);
}
...