некоторые вопросы по юнит-тестам и издевательствам над носорогом - PullRequest
3 голосов
/ 25 ноября 2011

Я новичок в написании юнит-тестов, поэтому учусь по ходу дела.Я использую Rhino Mocks с фреймворками MsTest и у меня есть несколько вопросов.

Где я могу найти документацию по макетам Rhino, описывающую ее особенности с пояснениями, чтобы я мог распечатать ее и изучить?

IЯ видел многочисленные примеры 2 следующих техник относительно ожиданий, что лучше или лучше подходит для конкретной ситуации?

Expect.Call( delegate { mockTestClass.MethodToMock(param) } ).Return(true);

или

var mockTestClass = MockRepository.GenerateMock<TestClass>();

mockTestClass.Expect( m => m.MethodToMock(param) ).Return( true );

Далее мне интересно, в чем разницамежду окурком и насмешкой есть класс и что следует использовать в каких сценариях?

Спасибо за любую помощь.

Ответы [ 2 ]

4 голосов
/ 25 ноября 2011

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

, что лучше или лучше подходит для конкретной ситуации?

Второй способ более «беглый» и рекомендуется.

в чем разница между заглушкой и насмешкой

Вот несколько ресурсов по этому поводу:

Кстати, если вы только начинаете работать с этими концепциями, я думаю, вам будет лучше использовать NUnit и Moq. Вот введение с примерами.

0 голосов
/ 25 ноября 2011

Если вы хотите проверить, был ли вызван определенный метод, и возвращаемое значение не имеет значения, я бы предложил использовать AAA-синтаксис и AssertWasCalled() метод:

// Arrange
var mock = MockRepository.GenerateMock<ICustomType>();
var service = new MyService(mock);

// Act
service.DoSomething();

// Assert 
// ensures that SomeMethod of the mock was called 
// whilst service.DoSomething() call
mock.AssertWasCalled(m => m.SomeMethod());

Разница между заглушками иmock из ракурсов каркаса RhinoMocks:

  • Ожидания могут быть установлены как для Mocks, так и для заглушек, но они проверяются только для Mocks, например, вы не сможете указать Repeat().Any() и так далее для заглушки
  • Заглушки никогда не завершаются неудачно при доступе к методам или свойствам, все свойства и методы возвращают default(T) для данного типа возвращаемого значения T, свойства Stub - это обычные свойства

Подробнее о разницемежду Mocks и Stubs смотрите в хорошем наборе ссылок, приведенных в ответе Маурисио, я бы предложил работу Мартина Фаулера.

...