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

Макет объектов - Метод установки - Тестирование

Я изучаю Test Driven Development и пытаюсь использовать библиотеку Moq для насмешек. Какова цель метода установки класса Mock?

4b9b3361

Ответ 1

Поведение объекта Moq Mock по умолчанию - это заглушить все методы и свойства. Это означает, что вызов этого метода/свойства с любыми параметрами не завершится неудачно и вернет значение по умолчанию для конкретного типа возврата.

Вы вызываете метод Setup по любой или по следующим причинам:

  • Вы хотите ограничить входные значения методом.
public interface ICalculator {
  int Sum(int val1, val2);
}

var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
  It.IsAny<int>(), //Any value
  3                //value of 3
));

Вышеуказанная настройка будет соответствовать вызову метода Sum с любым значением для val1 и val2 значения 3.

  • Вы хотите вернуть определенное значение. Продолжая пример ICalculator, следующая настройка вернет значение 10 независимо от входных параметров:
var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
  It.IsAny<int>(), //Any value
  It.IsAny<int>()  //Any value
)).Returns(10);
  • Вы хотите использовать Mock<T>.VerifyAll() после настройки, чтобы проверить, что все предыдущие настройки были вызваны (один раз).
var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
  7, //value of 7
  3                //value of 3
));

mock.Setup(m=>m.Sum(
  5, //value of 5
  3                //value of 3
));

mock.VerifyAll();    

Вышеприведенный код проверяет, что Sum вызывается дважды. Один раз с (7,3) и один раз с (5,3).

Ответ 2

Метод установки используется для установки ожиданий на макет объекта Например:

mock.Setup(foo => foo.DoSomething("ping")).Returns(true);

Здесь вы устанавливаете метод DoSomething на макет объекта. Вы говорите, когда параметр "ping", метод возвращает true.

Теперь этот объект может действовать как макет или заглушка в зависимости от вашего использования. Если вы хотите использовать его в тестировании на основе состояния, он может действовать как заглушка. Если вы хотите использовать его в тестировании на основе поведения, он может действовать как макет. При тестировании поведения вы вызываете метод проверки на объект-макет, чтобы утверждать, что метод был вызван с параметром "ping"

Далее ссылайтесь на эти ссылки:

http://martinfowler.com/articles/mocksArentStubs.html

http://code.google.com/p/moq/wiki/QuickStart