Статья и вопрос задаются в разных контекстах. Относительно сферы Rspec авторы Книги Rspec пишут в гл. 14.1:
"Чтобы создать двойник, просто используйте метод double()
, например:
thingamajig_double = double('thing-a-ma-jig')
... Существуют также методы stub()
и mock()
, , которые производят объект такого же типа :
stub_thingamajig = stub('thing-a-ma-jig')
mock_thingamajig = mock('thing-a-ma-jig')
Мы можем использовать их, чтобы сделать спецификацию более понятной, когда это уместно. "(Выделено мной)
Авторы также включают фрагмент кода позже в гл. 14.3 -
describe Statement do
it "logs a message on generate()" do
customer = stub('customer')
customer.stub(:name).and_return('Aslak')
logger = mock('logger')
statement = Statmement.new(customer, logger)
logger.should_receive(:log).with(/Statement generated for Aslak/)
statement.generate
end
end
и затем напишите «Используя метод mock()
для генерации двойного регистратора и метод stub()
для генерации двойного клиента, мы помогаем выразить, что эти объекты играют разные роли в примере. " (выделение мое)
Эти фрагменты кода и пояснения заставляют меня полагать, что хотя концептуальные линии, проведенные г-ном Фаулером в его статье, являются хорошими для рисования, нет функциональной разницы между stub()
или mock()
(или double()
, в этом отношении) в Rspec. Может быть, это не так, я не проверял документацию.