mcpField
U
unittest-skill

unittest-skill

github.com/lambdatestテスト・品質384228 回インストール2 週間前に更新
リポジトリ

unittest-skill について

Pythonのunittestフレームワークでテストを作成・実行するためのスキルガイドです。アサーション、サブテスト、モック、ライフサイクル、テスト検出を扱います。

主な機能

  1. 01TestCaseの準備とテストメソッド
  2. 02一般的なアサーションメソッド
  3. 03subTestによるパラメーター化テスト
  4. 04unittest.mockによるモック
  5. 05テストの検出と実行

活用シーン

  1. 01Pythonのクラスや関数のテスト
  2. 021つのテストで複数の入力ケースを確認
  3. 03リポジトリーやサービスのモック

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/lambdatest/agent-skills --skill unittest-skill

インストール後、Claude Code で/unittest-skillを入力して読み込まれたか確認します。

同梱ファイルreference/advanced-patterns.mdreference/playbook.md

詳細

Python unittest スキル

基本パターン

基本的なテスト
import unittest

class TestCalculator(unittest.TestCase):
    def setUp(self):
        self.calc = Calculator()

    def test_add(self):
        self.assertEqual(self.calc.add(2, 3), 5)

    def test_divide_by_zero(self):
        with self.assertRaises(ZeroDivisionError):
            self.calc.divide(10, 0)

    def test_multiple_assertions(self):
        self.assertEqual(self.calc.add(2, 2), 4)
        self.assertEqual(self.calc.subtract(5, 3), 2)
        self.assertAlmostEqual(self.calc.divide(10, 3), 3.333, places=3)

    def tearDown(self):
        pass  # cleanup

if __name__ == '__main__':
    unittest.main()
アサーション
self.assertEqual(a, b)
self.assertNotEqual(a, b)
self.assertTrue(condition)
self.assertFalse(condition)
self.assertIsNone(obj)
self.assertIsNotNone(obj)
self.assertIs(a, b)              # same object
self.assertIn(item, collection)
self.assertNotIn(item, collection)
self.assertIsInstance(obj, cls)
self.assertAlmostEqual(a, b, places=5)
self.assertGreater(a, b)
self.assertLess(a, b)
self.assertRegex(str, r'\d+')
self.assertCountEqual(a, b)     # same elements, any order

# Exception
with self.assertRaises(ValueError) as ctx:
    raise ValueError("bad")
self.assertIn("bad", str(ctx.exception))

# Warning
with self.assertWarns(DeprecationWarning):
    deprecated_function()
サブテスト(パラメーター化)
def test_add_multiple(self):
    test_cases = [(2, 3, 5), (-1, 1, 0), (0, 0, 0)]
    for a, b, expected in test_cases:
        with self.subTest(a=a, b=b):
            self.assertEqual(self.calc.add(a, b), expected)
モック
from unittest.mock import patch, MagicMock, Mock

class TestUserService(unittest.TestCase):
    @patch('myapp.service.UserRepository')
    @patch('myapp.service.EmailService')
    def test_create_user(self, MockEmail, MockRepo):
        mock_repo = MockRepo.return_value
        mock_repo.save.return_value = User(1, 'Alice')

        service = UserService()
        result = service.create_user('[email protected]', 'Alice')

        self.assertEqual(result.id, 1)
        mock_repo.save.assert_called_once()
        MockEmail.return_value.send_welcome.assert_called_with('[email protected]')
ライフサイクル
setUpClass()    → Once before all tests (classmethod)
setUp()         → Before each test
test_method()   → Test
tearDown()      → After each test
tearDownClass() → Once after all tests (classmethod)

実行:python -m unittest または python -m unittest test_module.TestClass.test_method

検出:python -m unittest discover -s tests -p "test_*.py"

詳細なパターン

高度なパターン、デバッグガイド、CI/CD との統合、ベストプラクティスについては、 reference/playbook.md をご覧ください。

コメント