Ruby布尔值、断言方法应用:我的TDD代码是否可优化?
TDD
gem 'minitest', '~> 5.2' require 'minitest/autorun' require 'minitest/pride' require './tire' class TireTest < Minitest::Test def test_the_tire_does_not_start_out_flat tire = Tire.new refute tire.flat?, "This tire is brand new" end def test_the_tire_has_a_blowout tire = Tire.new tire.blow_out assert tire.flat?, "I ran over a nail!" end end
CODE
class Tire attr_reader :tire def initialize @tire = false end def flat? @tire end def blow_out @tire = true end end
嘿,你的代码其实已经做得很棒了——完全贴合TDD的思路,而且精准满足了测试要求,根本不存在“过于基础”的问题。不过确实可以做几个小调整,让它更符合Ruby的编码习惯,同时可读性拉满:
优化点1:变量命名更直观
原来的实例变量@tire有点模糊,毕竟它存的不是轮胎对象本身,而是“是否漏气”的状态。改成@flat之后,任何人看代码都能立刻get到这个变量的含义,不需要额外脑补。
优化后的代码
class Tire def initialize @flat = false end def flat? @flat end def blow_out @flat = true end end
优化点2:去掉冗余的attr_reader
原来的attr_reader :tire其实根本没被用到,删掉它能让代码更清爽。如果你想进一步简化,也可以用attr_reader :flat配合别名,但其实没必要——直接保留flat?方法更符合Ruby的查询方法命名习惯(带问号的方法明确返回布尔值),可读性反而更高。
关于测试代码
你的测试写得非常棒:每个方法对应一个独立场景,断言的错误信息也清晰明了,完全不需要改动。
总的来说,基础的实现不代表不好——TDD本来就是从简单、可验证的代码开始迭代的。你的代码已经做到了简洁易懂,优化后只是让它的意图更明确,后续维护起来会更轻松。
内容的提问来源于stack exchange,提问作者cjl85
相关产品推荐
相关产品推荐

