SuperAPI AI 工具集

testunit-skill

测试与质量

查看项目

更新于 10-15 14:49

技能介绍

用途

Test::Unit 是 Ruby 的经典 xUnit 风格单元测试框架,使用测试用例类(TestCase)和断言方法(assert methods)来组织与验证测试。本技能用于在 Ruby 项目中生成 Test::Unit 风格的测试代码,适合需要经典 xUnit 结构、以断言为核心表达测试预期的场景。

主要能力

基本测试结构

测试类继承自 Test::Unit::TestCase,测试方法名必须以 test_ 开头。可在类中定义 setup 与 teardown 方法,分别在每个测试方法执行前后运行。示例:

require 'test/unit'

class TestCalculator < Test::Unit::TestCase
  def setup
    @calc = Calculator.new
  end

  def test_addition
    assert_equal(5, @calc.add(2, 3), "2 + 3 should equal 5")
  end

  def test_subtraction
    assert_equal(1, @calc.subtract(3, 2))
  end

  def test_division_by_zero
    assert_raise(ZeroDivisionError) { @calc.divide(10, 0) }
  end

  def test_float_division
    assert_in_delta(3.33, @calc.divide(10, 3), 0.01)
  end

  def teardown
    # cleanup
  end
end

断言方法

技能涵盖的断言包括:

assert_equal(expected, actual, message = nil)
assert_not_equal(unexpected, actual)
assert_true(value)
assert_false(value)
assert_nil(value)
assert_not_nil(value)
assert_instance_of(klass, obj)
assert_kind_of(klass, obj)
assert_respond_to(obj, :method_name)
assert_match(/pattern/, string)
assert_no_match(/pattern/, string)
assert_include(collection, item)
assert_not_include(collection, item)
assert_empty(collection)
assert_not_empty(collection)
assert_raise(ErrorClass) { block }
assert_nothing_raised { block }
assert_in_delta(expected, actual, delta)
assert_operator(value, :>, 5)
assert_send([obj, :method, arg])
assert_block("message") { condition }

测试夹具(Fixtures)

除每个测试前后的 setup / teardown 外,还可使用类方法 self.startup 与 self.shutdown,分别在整个测试类的所有测试开始前与结束后各执行一次。示例:

class TestDatabase < Test::Unit::TestCase
  def self.startup
    # Once before all tests in class
    @@db = Database.connect('test')
  end

  def self.shutdown
    # Once after all tests in class
    @@db.disconnect
  end

  def setup
    # Before each test
    @@db.begin_transaction
  end

  def teardown
    # After each test
    @@db.rollback
  end
end

测试命名与组织

测试方法必须以 test_ 开头,例如:

class TestUserService < Test::Unit::TestCase
  def test_create_user
    user = UserService.create('Alice', 'alice@test.com')
    assert_not_nil(user)
    assert_equal('Alice', user.name)
  end

  def test_find_user_by_email
    user = UserService.find_by_email('alice@test.com')
    assert_instance_of(User, user)
  end
end

使用方式

安装:

gem install test-unit

运行单个测试文件:

ruby test/test_calculator.rb

运行目录下所有测试:

ruby -Itest -e "Dir.glob('test/**/test_*.rb').each{|f| require f}"

自动发现(需 test-unit gem):

testrb test/

适用场景

  • 用户提到 "Test::Unit"、"assert_equal" 等断言,或需要为 Ruby 代码编写经典 xUnit 风格单元测试。
  • 需要以测试用例类、断言方法、setup/teardown 夹具组织测试的 Ruby 项目。

限制

关于高级模式、调试指南、CI/CD 集成与最佳实践,资料指向 reference/playbook.md,本技能介绍中未展开。其余未在资料中明确说明的功能、平台支持或限制暂未提供。