testmu-ai/测试单元技能(testmu-ai/testunit-skill)
2026-10-22查看 3复制 0
使用 Ruby 生成 Test::Unit xUnit 风格测试。
📘如何使用这个技能
- 1复制技能内容·点击上方「Copy SKILL.md」复制全部内容,或 Download 下载到本地
- 2打开你的 AI 客户端·支持 Claude Code、Trae、Cursor、ChatGPT、DeepSeek、Kimi 等任意 AI 助手
- 3粘贴为系统提示/知识文件·Claude Code:放入 .claude/skills/ 目录;普通对话:作为首条消息发送并说「请严格按这份技能文档执行」
- 4直接提出你的需求·AI 会按技能定义的工作流、格式和约束来处理,无需再解释背景
💡 提示:技能生效后,每次对话只需一句需求,AI 会按 SKILL.md 的流程执行。
SKILL.md2786 chars
---
name: testunit-skill
description: >
Generates Test::Unit tests in Ruby. Classic xUnit-style testing with assert
methods and test case classes. Use when user mentions "Test::Unit",
"assert_equal Ruby", "Ruby test-unit". Triggers on: "Test::Unit",
"Ruby test-unit", "assert_equal Ruby" (not RSpec).
languages:
- Ruby
category: unit-testing
license: MIT
metadata:
author: TestMu AI
version: "1.0"
---
# Test::Unit Ruby Skill
## Core Patterns
### Basic Test
```ruby
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
```
### Assertions
```ruby
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 }
```
### Test Fixtures
```ruby
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 Ordering and Naming
```ruby
class TestUserService < Test::Unit::TestCase
# Methods must start with 'test_'
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
```
## Setup: `gem install test-unit`
## Run: `ruby test/test_calculator.rb` or `ruby -Itest -e "Dir.glob('test/**/test_*.rb').each{|f| require f}"`
## Autodiscovery: `testrb test/` (with test-unit gem)
## Deep Patterns
For advanced patterns, debugging guides, CI/CD integration, and best practices,
see `reference/playbook.md`.