智享教程网
白蓝主题五 · 清爽阅读
首页  > 日常经验

Ruby单元测试怎么写 日常维护方法与实用案例

ref="/tag/2028/" style="color:#8B0506;font-weight:bold;">Ruby单元测试怎么写

在开发 Ruby 项目时,写单元测试是个很自然的习惯。比如你正在做一个电商系统里的价格计算模块,写完一个折扣方法后,总得确认它在不同情况下都能算对。这时候单元测试就派上用场了。

Ruby 自带的测试框架叫 Test::Unit,但更常用的是 minitestRSpec。新手可以从 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,避免重复创建对象。

写单元测试不是为了应付检查,而是让代码更有底气。改代码时只要测试还过,心里就不慌。就像你改了折扣逻辑,跑一遍测试就知道有没有误伤老功能。