Перемешивание - установка свойства перед вызовом конструктора - PullRequest
0 голосов
/ 17 декабря 2009

В RhinoMocks или Moq можно ли установить свойства объекта перед вызовом конструктора?

Я пытаюсь проверить метод.

Класс, содержащий метод, имеет некоторый код в своем конструкторе, который зависит от некоторых устанавливаемых членов, к сожалению, в конструкторе нет параметров для их установки, поэтому я должен установить их через свойство. Есть ли способ установить это свойство перед вызовом конструктора в RhinoMocks или Moq?

Ответы [ 2 ]

7 голосов
/ 17 декабря 2009

Как это будет работать? Задать свойство для объекта, который еще не существует? Я думаю, вы должны признать, что с дизайном вашего класса что-то не так, и попытаться изменить его, чтобы он стал более тестируемым, например, с помощью внедрения зависимостей .

1 голос
/ 17 декабря 2009

Звучит странно: klausbyskov, вероятно, прав в том, что здесь есть какая-то проблема с дизайном.

Эти элементы установлены прямо в коде? Например

protected string myField = "this and that";

public MyClass()
{
    if (myField == "this and that") { DoSomething(); }
}

Если это так, то единственный способ изменить эти элементы - это переопределить их подклассом, например, конструктор

public SubClass()
{
    myField = "something else";
}

будет гарантировать, что SubClass () имеет поле, инициализированное как «что-то еще». Однако, это будет запускаться после конструктора для MyClass ().

Я бы внимательно изучил необходимость в любой логике вашего конструктора. В общем, это плохая идея; если вам нужно условно создать элементы в объекте, рассмотрите вместо этого шаблон Factory .

...