ref="/tag/2028/" style="color:#8B0506;font-weight:bold;">Ruby单元测试怎么写
在开发 Ruby 项目时,写单元测试是个很自然的习惯。比如你正在做一个电商系统里的价格计算模块,写完一个折扣方法后,总得确认它在不同情况下都能算对。这时候单元测试就派上用场了。
Ruby 自带的测试框架叫 Test::Unit,但更常用的是 minitest 和 RSpec。新手可以从 minitest 开始,轻量又够用。
使用 Minitest 写单元测试
先确保你的项目里有 minitest。大多数 Ruby 环境默认已安装,如果没有,可以运行:
gem install minitest假设你有一个计算商品总价的类:
class PriceCalculator
def self.total(price, tax_rate = 0.1)
price + (price * tax_rate)
end
end现在你想测试这个方法在价格为 100 时是否正确返回含税价 110。创建一个测试文件 test_price_calculator.rb:
require 'minitest/autorun'
require_relative 'price_calculator'
class TestPriceCalculator < Minitest::Test
def test_total_with_default_tax
result = PriceCalculator.total(100)
assert_equal 110, result
end
def test_total_with_custom_tax
result = PriceCalculator.total(200, 0.05)
assert_equal 210, result
end
end保存后在终端运行:
ruby test_price_calculator.rb如果看到两个点(..)和“2 runs, 2 assertions”,说明测试通过了。
测试失败是什么样
假如你把预期值写错了,比如写成 assert_equal 111, result,运行后会看到错误信息指出实际是 110,期望是 111。这种即时反馈能帮你快速发现逻辑问题,就像代码的体检报告。
组织测试结构的小技巧
当测试变多时,可以用 setup 方法提前准备共用数据:
def setup
@calculator = PriceCalculator
end
def test_total_basic
result = @calculator.total(50)
assert_equal 55, result
end这样每个测试方法都能用 @calculator,避免重复创建对象。
写单元测试不是为了应付检查,而是让代码更有底气。改代码时只要测试还过,心里就不慌。就像你改了折扣逻辑,跑一遍测试就知道有没有误伤老功能。