Вы можете думать о макете (или двойнике) как о поддельном объекте. Когда вы тестируете и вам нужно работать с объектом, который нелегко использовать в вашем тесте, вы можете использовать макет как пример того, как вы ожидаете, что этот объект будет вести себя и обходить его. Заглушки могут использоваться аналогичным образом, но для отдельного метода объекта.
Вот довольно надуманный пример использования обоих:
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
Вы можете себе представить, что использование большого количества издевательств или окурков - плохая идея; это в основном маскировка частей вашего кода в тесте, но это простое решение для некоторых сложных / редких сценариев тестирования.
Factory Girl полезна для генерации данных для тестов. Вы бы использовали фабрики в качестве рецептов для создания экземпляров для ваших моделей, вам может потребоваться протестировать что-либо, включающее много тестовых данных, и это может быть ситуация, когда использование осветителей не будет работать, а создание сложных объектов явно может быть утомительным.