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

Какая разница между макетами, заглушкой и девушкой?

Я новичок в rspec и всей методологии TDD. Может кто-то, пожалуйста, объясните разницу между макетом и заглушкой. Когда мы их используем, и когда мы используем Factory Girl для создания объектов в тестовых случаях?

4b9b3361

Ответ 1

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

Вот довольно надуманный пример использования большого количества обоих:

class Client
  def connect_to_server
    if Server.connect.status == 'bad'
      show_an_error
    else
      do_something_else
    end
  end
  def do_something_else; end
  def show_an_error; end
end

context "failure" do
  it "displays an error" do
    bad_network_response = double("A bad response from some service", :status => 'bad')
    Server.should_receive(:connect).and_return(bad_network_response)

    client = Client.new
    client.should_receive(:show_an_error)
    client.connect_to_server
  end
end

Вы можете себе представить, что использование большого количества макетов или stubbing - плохая идея; это в основном маскировка частей вашего кода в вашем тесте, но это простое решение для некоторых сложных/редких тестовых сценариев.

Factory Девушка полезна для генерации данных для тестов. Вы бы использовали фабрики в качестве рецептов для создания экземпляров для своих моделей, вам может потребоваться проверить что-то, что связано с множеством тестовых данных, и это будет ситуация, когда использование приборов не будет работать и явное создание сложных объектов может быть утомительным.

Ответ 2

Ваша первая остановка - знаменитая статья Мартина Фаулера: Mocks не являются заглушками

Edit

Mocks и Stubs являются двумя типами Test Doubles (терминология Мезарос). Двойные тесты обычно используются для имитации зависимостей, необходимых для системного теста (или теста класса), так что SUT/CUT можно тестировать изолированно от его зависимостей. (Caveat - точная терминология может быть довольно осязаемым предметом, например, как упоминалось Jeff here)

Из Википедии:

Примеры

  • Метод заглушки может просто возвращать постоянное значение при вызове SUT, например. для проведения конкретного тестового примера SUT.
  • * Рамки вроде Mockito (Java) и Moq (.Net) позволяет вам строить макетные классы по интерфейсу зависимостей "на лету" с минимальным кодом и обеспечивать возможность проверки правильности взаимодействия SUT с макетом, например проверив, что SUT вызывал ложные методы правильное количество раз с правильными параметрами.

* Отказ от ответственности - я не рубиновый dev