Не может дразнить класс с конструктором, имеющим параметр массива с помощью Насмешек Носорога

Мы не можем дразнить этот класс в 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)

Носорог дразнит сбои, жалуясь, что он не может найти конструктора с соответствием аргументам. Что я делаю неправильно?

Спасибо,

5
задан Ajay Aradhya 21 September 2017 в 09:40
поделиться

2 ответа

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

var mock = MockRepository.GenerateMock<Service>(
    new object[] { new Command[0] }
);
6
ответ дан 14 December 2019 в 13:28
поделиться

Кроме того, вы можете обернуть 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(...);
}
0
ответ дан 14 December 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: