我尝试使用 Rspec 编写最基本的测试,以测试标准输出上字符串的接收。
我已经以与 RSpec Book 中所写的方式完全相同的方式对标准输出进行了 stub,如下所示:
require './tweetag.rb'
module Tweetag
describe Tweet do
describe "#print" do
it "prints test" do
output = double('output').as_null_object
t = Tweetag::Tweet.new(output)
t.print
output.should_receive(:puts).with('test')
end
end
end
end
Ruby 代码如下所示:
module Tweetag
class Tweet
def initialize(output)
@output=output
end
def print
@output.puts('test')
end
end
end
如您所见,没有什么复杂的。但是,运行规范后我收到的答案如下:
Failures:
1) Tweetag::Tweet#print prints test
Failure/Error: output.should_receive(:puts).with('test')
(Double "output").puts("test")
expected: 1 time
received: 0 times
我试过删除“as_null_object”,然后答案是:
1) Tweetag::Tweet#print prints test
Failure/Error: t.print
Double "output" received unexpected message :puts with ("test")
谢谢您的帮助。