Модульное тестирование определений макета / заглушки в Moq - PullRequest
13 голосов
/ 09 сентября 2010

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

Макет: подделка, которая будет использоваться в вашем тесте для окончательного утверждения

Заглушка: подделка, которая будет использоваться в вашем тестетест для изоляции зависимости, но не для утверждения

Однако Moq, по-видимому, позволяет создавать только Mocks.Пространство имен Stub в платформе, по-видимому, устарело из-за рекомендаций по использованию Mock.SetupXXX.

Я что-то упустил в моем понимании этого?Или есть общее понимание, что фиктивный объект может быть использован как ничто иное, как заглушка?

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

Ответы [ 4 ]

16 голосов
/ 10 сентября 2010

Согласно сайту проекта Moq , Moq обеспечивает:

Детальный контроль над поведением макета с помощью простого перечисления MockBehavior (не нужно изучать, чтотеоретическая разница между макетом, заглушкой, подделкой, динамическим издевательством и т. д.)

Отсутствие различий между макетами, заглушками и т. д. - это намеренное дизайнерское решение;Дизайнерское решение, которое я, например, предпочитаю.Если мне нужен макет true , я звоню на него Verify().Если нет, то нет Verify().Мне нравится простота, и я не обнаружил, что упускаю различие между mock и stub.

11 голосов
/ 09 сентября 2010

Мартин Фаулер написал хорошую статью, Насмешки - это не заглушки , которая, я думаю, делает различие ясным.

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

3 голосов
/ 09 сентября 2010

imho, это просто глупая дискуссия.

Важно то, что вы используете макеты / заглушки, чтобы утверждать, что вам нужно в тесте, и не утверждаете, что вы не делаете.

0 голосов
/ 24 сентября 2010

Действительно, Moq может создавать настоящие заглушки. Со страницы быстрого запуска Moq :

* Setup a property so that it will automatically start tracking its value (also known as Stub):

  // start "tracking" sets/gets to this property
  mock.SetupProperty(f => f.Name);

  // alternatively, provide a default value for the stubbed property
  mock.SetupProperty(f => f.Name, "foo");


  // Now you can do:

  IFoo foo = mock.Object;
  // Initial value was stored
  Assert.Equal("foo", foo.Name);

  // New value set which changes the initial value
  foo.Name = "bar";
  Assert.Equal("bar", foo.Name);

* Stub all properties on a mock (not available on Silverlight):

  mock.SetupAllProperties();

ИМХО, различия между вкусами подделок лучше всего рассматривать как различие между функциями этих подделок, а не типами подделок, поскольку подделка может выполнять несколько ролей в один раз (например, может быть настоящим издевательством и диверсантом одновременно), и, поскольку такое различие не требуется для использования фиктивного фреймворка. (Я должен написать об этом в блоге!)

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