Подтвердить что ты не робот

Используя RhinoMocks, как вы издеваетесь или заглушаете конкретный класс без пустого конструктора?

Издевательство над конкретным классом с Rhino Mocks кажется довольно простым, когда у вас есть пустой конструктор класса:

public class MyClass{
     public MyClass() {}
}

Но если я добавлю конструктор, который принимает параметры и удаляет тот, который не принимает параметры:

public class MyClass{
     public MyClass(MyOtherClass instance) {}
}

Я получаю исключение:

System.MissingMethodException: не удается найти конструктор с совпадением Аргументы

Я пробовал помещать нули в свой призыв к Mock или Stub, но он не работает.

Могу ли я создать mocks и stubs конкретных классов, которым не нужны конструкторы без параметров?

4b9b3361

Ответ 1

Угу. Просто передайте параметры в своем вызове StrictMock():

// New FruitBasket that can hold 50 fruits.
MockRepository mocks = new MockRepository();
FruitBasket basket = mocks.StrictMock<FruitBasket>(50);

Ответ 2

Если вы создадите конкретный класс без пустого/стандартного конструктора, тогда Rhino Mocks придется использовать любые другие конструкторы. Rhino будет нуждаться в том, чтобы вы предоставили параметры для любых непустых конструкторов, так как у него не будет никаких подсказок, как их создавать иначе.

Моя ошибка в том, что я пытался передать нули в вызов CreateMock или GenerateMock, как только я сгенерировал aa ненулевой параметр для конструктора, вызовы для создания макета или заглушки начали работать.

Ответ 3

Вы должны передать их после своего оператора DynamicMock<T>, который принимает массив параметров в качестве аргумента. К сожалению, там нет проверки типа, но он будет вызывать соответствующий конструктор, если вы сопоставляете свои аргументы с сигнатурой.

Например:

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