Создайте класс отображения с возможностью записи статуса.
Ваш производственный код будет использовать этот экранный объект, поэтому вы можете изменять способ записи в STDOUT. Для этой логики будет только одно место, в то время как ваши тесты основаны на абстракции.
Например:
output = stub('output')
game = Game.new(output)
output.should_receive(:display).with('Welcome to Codebreaker!')
game.start()
В то время как ваш производственный код будет иметь что-то вроде
class Output
def display(message)
# puts or whatever internally used here. You only need to change this here.
end
end
Я бы прошел этот тест, выполнив следующее:
def start
@output.display('Welcome to Codebreaker!')
end
Здесь производственному коду не важно, как выводится результат. Теперь это может быть любой формой отображения абстракции.
Вся вышеприведенная теория не зависит от языка и приносит удовольствие. Вы по-прежнему издеваетесь над вещами, которые вам не принадлежат, такими как сторонний код, но вы все еще проверяете, что выполняете работу под рукой через абстракцию.