Я пытаюсь поднять голову вокруг тестового дизайна, в частности RSpec. Но у меня проблемы с некоторыми примерами из книги RSpec.
В книге мы проверяем вывод на $STDOUT следующим образом:
output = double('output')
game = Game.new
output.should_receive(:puts).with('Welcome to Codebreaker!')
game.start()
Ну, это работает после моды. Но почему мне все равно, если объект Game использует метод puts()? Если я изменил его на print(), должен ли он действительно нарушить тест? И, что еще более важно, это не относится к одному из принципов TDD - что я должен проверять, что делает этот метод (дизайн), а не как он это делает (реализация)?
Есть ли способ написать тест, который просто проверяет, что заканчивается на $STDOUT, не глядя на какой метод его там помещает?