最好的测试测试你想要实现的目标,而不是你如何实现它......将测试与实现联系起来会使你的测试变得脆弱。
因此,您尝试使用此方法实现的是在加载扩展程序时更改“puts”。测试 puts_with_append 方法并没有达到这个目标......如果你后来不小心将它重新命名为其他东西,你想要的 puts 更改将不起作用。
但是,在不使用实现细节的情况下进行测试会相当困难,因此,我们可以尝试将实现细节推送到它们不会改变的地方,比如STDOUT。
只是测试内容
$stdout.stub!(:write)
$stdout.should_receive(:write).with("OneThis will be appended!")
puts "One"
全面测试
我将在接下来的一天左右把它变成一篇博文,但我认为你还应该考虑到你已经为一个和多个参数得到了想要的结果,并且你的测试应该易于阅读。我将使用的最终结构是:
需要“rspec” 需要“./your_extention.rb”
describe Kernel do
describe "#puts (overridden)" do
context "with one argument" do
it "should append the appropriate string" do
$stdout.stub!(:write)
$stdout.should_receive(:write).with("OneThis will be appended!")
puts "One"
end
end
context "with more then one argument" do
it "should append the appropriate string to every arg" do
$stdout.stub!(:write)
$stdout.should_receive(:write).with("OneThis will be appended!")
$stdout.should_receive(:write).with("TwoThis will be appended!")
puts("One", "Two")
end
end
end
end