我试图让我的头脑围绕测试驱动的设计,特别是RSpec.但我遇到了RSpec Book的一些例子.
在本书中,我们测试$ STDOUT的输出如下:
output = double('output')
game = Game.new
output.should_receive(:puts).with('Welcome to Codebreaker!')
game.start()
Run Code Online (Sandbox Code Playgroud)
嗯,这是一种时尚之后的作品.但是,为什么我应该关心Game对象是否使用puts()方法?如果我把它改成print(),它真的会破坏测试吗?并且,更重要的是,这不是针对TDD的主要内容之一 - 我应该测试方法的作用(设计)而不是它是如何做的(实现)?
有没有什么方法可以编写一个测试,只测试最终在$ STDOUT上的内容,而不用看看它放在哪个方法?