Как автоматически заглушить зависимости при тестировании функции рецепта - PullRequest
1 голос
/ 13 октября 2011

У меня есть функция foo (), которая, в свою очередь, вызывает функцию bar ().Как я могу подтвердить, что в действительности вызывается bar?

Пример сложного метода бизнес-логики для тестирования:

class Car
{
  IStarter starter
  IKeyhole keyhole
  IBrakePedal pedal
  Drive()
  {
    keyhole.InsertKey()
    keyhole.RotateToStart()
    starter.TurnEngineOver()

    ...

    if (pedal.Pressed)
      this.SlowDown()
  }
}

У меня есть метод, который объединяет 6 внешних зависимостей(взаимодействует с методами) и запускает их в последовательности, порядок не важен.Я хотел бы убедиться, что каждый был вызван.В другом тесте я хотел бы настроить условные выражения и убедиться, что подмножество было вызвано.

В C # с Moq у меня есть полная страница кода установки.

Вот что я хотел быхотелось бы видеть в моем модульном тесте:

let `check that brake pedal slows down car` =
   let car = new Car()
   car.pedal.Pressed <- true
   car.Drive()
   car.SlowDown |> wasCalled

Остальное должно быть выведено из использования.У меня есть реальная необходимость уменьшить шум в тестах.

1 Ответ

2 голосов
/ 14 октября 2011

Самое близкое, что я знаю, к тому, что вы хотите, это AutoMockingContainer .

В двух словах, это контейнер IoC, который дает вам автомобиль со всеми IStarter, IKeyhole, IBrakepedal заглушенными подключен к инстансу Car, без явной регистрации любого из них.Затем вы продолжаете устанавливать свои ожидания как обычно (в вашем случае, «car.SlowDown () был вызван»), а затем вызываете тестируемый метод.

Специфика зависит от используемого контейнера IoC и используемой среды моделирования.Оригинал был написан с использованием Windsor и старой версии Rhino Mocks, но теперь есть AMC для StructureMap , Ninject, Autofac + Moq и т. Д.

Youможно начать с одного из них и обернуть его, чтобы сделать его более идиоматическим в F #.

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

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