Любой способ проверить, что макеты или заглушки действительны? - PullRequest
5 голосов
/ 10 марта 2011

Скажем, у меня есть класс и метод, определенные следующим псевдо кодом

class Book
  def quick_info
    return title + " " + author
  end
end

Если я пишу модульный тест для какого-то другого класса, которыйиспользует этот класс Book, я бы создал заглушку для вызова метода Book.quick_info.

Теперь я полагаю, что проблема возникнет, если мой класс Book изменится, например, если метод quick_info был переименован в short_description.Мой модульный тест все еще будет использовать quick_info, и похоже, что мои тесты проходят просто отлично, хотя на самом деле он должен давать сбой.

Мне было интересно, есть ли что-то, что можно запустить, чтобы проверить, что заглушки/ mocks в моем тесте были составлены из правильных классов и методов.Может быть, что-то подобное можно запустить на сервере непрерывной интеграции, чтобы убедиться, что все совпадает?

Хммм ... и теперь мне пришла в голову мысль.Возможно ли вообще создать ложный метод, который не существует?Если нет, то весь этот вопрос является спорным.

РЕДАКТИРОВАТЬ:

Я только что попробовал это с помощью rspec 2, и я знаю, что я могу создать экземпляр Book исоздайте метод с именем i_dont_exist, и я могу назвать его просто отлично.Так что мой вопрос остается в силе.Есть ли способ проверить, соответствуют ли мои макеты / заглушки классам / объектам, которые действительно существуют?

1 Ответ

4 голосов
/ 10 марта 2011

Мокко имеет опцию для этого:

Mocha::Configuration.prevent(:stubbing_non_existent_method)

Хотя это требует от вас издеваться над существующим объектом. Если вы создаете макет с нуля, он не будет работать (поскольку он не знает, какие методы должны быть там).

С точки зрения лучших практик, ИМХО, вы смотрите на это с неправильной стороны. У вас также должен быть модульный тест для класса Book, чтобы при переименовании метода вы получали тестовые сбои. Это должно быть достаточно сильным сигналом для «grep» кода, чтобы увидеть, есть ли еще вызовы этого метода.

Кроме того (если только это не пример), зачем вам в любом случае издеваться над Книгой? Это просто данные - вы обычно хотите имитировать внешние сервисы и т. Д. И работать с реальными объектами данных в своих тестах.

...