Нужно ли явно устанавливать ожидаемые возвращаемые значения только для объекта Mock? - PullRequest
2 голосов
/ 10 октября 2011

Правильно ли мое наблюдение:

public intercafe IMyInterface { bool IsOK {get;set;} }

// If I use stub this always return true:
var stub = MockRepository.GenerateStub<IMyInterface>();
stub.IsOK = true;

// But if I use MOCK this always return false -NOT True
var mock= MockRepository.GenerateMock<IMyInterface>();
mock.IsOK = true;

Если я прав; почему причина?

Ответы [ 2 ]

1 голос
/ 10 октября 2011

Короткий ответ заключается в том, что вы можете установить mock.IsOK для возврата true, установив для него ожидание и указав возвращаемое значение:

var mock= MockRepository.GenerateMock<IMyInterface>();
mock.Expect(x => x.IsOK).Return(true);

Конечно, чтобы понять, почему, это помогает понятьРазница между издевательствами и окурками.Мартин Фаулер делает в этой статье лучше , чем я мог бы.

По сути, заглушка предназначена для использования фиктивных значений, и в этом смысле Rhino.Mocks позволяет вамлегко упорядочить то, что вы хотите, чтобы эти фиктивные значения были:

stub.IsOK = true;

С другой стороны, макеты предназначены для того, чтобы помочь вам протестировать поведение, позволяя вам установить ожидание для метода.В этом случае Rhino.Mocks позволяет вам упорядочить свои ожидания, используя следующий синтаксис:

mock.Expect(x => x.IsOK).Return(true);

Поскольку макет и заглушка служат двум различным целям, они имеют совершенно разные реализации.

Впример вашего примера Mock:

var mock= MockRepository.GenerateMock<IMyInterface>();
mock.IsOK = true;

Я не удивлюсь, если реализация сеттера IsOK в вашей модели пуста или вы полностью игнорируете ваш вызов.

0 голосов
/ 10 октября 2011

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

Имейте некоторое представление о различиях между имитациями, окурки и подделки.Не все согласны с одним ответом, но вы увидите, что существует общее согласие.Начало здесь может помочь: В чем разница между подделкой, издевательством и окурком?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...