You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:07:37