{
    "app": {
        "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).",
        "mode": "advanced-chat",
        "model_config": {
            "provider": "deepseek",
            "model": "deepseek-chat",
            "parameters": {
                "temperature": 0.7,
                "max_tokens": 4096
            }
        }
    },
    "instructions": "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 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 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 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 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 .",
    "variables": [],
    "opening_statement": "你好，我是 testunit-skill，Generates Test::Unit tests in Ruby. Classic xUnit-...",
    "suggested_questions": [],
    "source": "DeepseekModel",
    "source_url": "https://deepseekmodel.com/skill?id=lambdatest-agent-skills-testunit-skill-skill-md"
}