mcpField
T
testing-unit

testing-unit

github.com/alphaonedev测试与质量43 次安装
代码仓库

关于 testing-unit

面向多语言开发者的单元测试技能,涵盖 JavaScript、Python、Go、Ruby、Swift 和 Java 的测试框架,重点是模拟依赖与隔离测试。

主要功能

  1. 01创建模拟对象与桩响应
  2. 02隔离测试并减少副作用
  3. 03支持多语言测试框架
  4. 04配置测试框架与测试环境
  5. 05在 CI/CD 中集成单元测试

适用场景

  1. 01为新函数编写单元测试
  2. 02模拟 API 或数据库依赖
  3. 03排查测试失败并重构代码
  4. 04在 TDD 工作流中验证实现

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill testing-unit

安装后在 Claude Code 中输入/testing-unit确认已加载。

详细介绍

用途

此技能帮助 AI 使用 Jest/Vitest(JavaScript)、pytest(Python)、Go 的 testify、RSpec(Ruby)、XCTest(Swift)和 JUnit5(Java)等框架进行单元测试。它专注于模拟依赖项、创建存根,并确保测试隔离,以便在受控环境中验证代码行为。

适用场景

在编写新的单元测试、调试现有测试,或重构需要隔离测试的代码时使用此技能。可用于 TDD 工作流、模拟外部 API 或数据库,或确保函数能够独立运行。例如,当函数依赖网络调用时,可模拟该调用,以便在本地进行测试,而无需真实依赖项。

主要功能

  • 模拟:为函数或模块创建模拟对象,例如在 Jest 中使用 jest.mock('module') 替换实际实现。
  • 存根:定义存根响应,例如在 pytest 中使用 monkeypatch.setattr() 伪造对象方法。
  • 隔离:隔离运行测试,例如使用 Go 的 testify 进行断言而不产生副作用,或使用 JUnit5 的 @TempDir 隔离文件操作。
  • 特定框架功能:支持 Jest/Vitest 断言(例如 expect().toBe())、pytest 的 setup/teardown fixture、RSpec 的 double 模拟对象、XCTest 的 setUp() 隔离功能,以及 JUnit5 的 @Mock 注解。
  • 配置格式:使用 Jest 的 jest.config.js 和 { testEnvironment: 'node', setupFilesAfterEnv: ['<rootDir>/setupTests.js'] } 配置自定义模拟;使用 pytest 的 pytest.ini 和 [pytest] addopts = -v 启用详细输出。

使用模式

要完成单元测试任务,请按以下步骤操作:1)确定要模拟的依赖项(例如 HTTP 调用)。2)在测试文件中设置模拟对象或存根。3)编写断言以验证输出。4)使用相应标志运行测试。对于 TDD,先编写一个失败的测试,再实现代码。在 Jest 中,使用 describe() 块组织测试;在 pytest 中,使用 fixture 进行共享设置。始终通过避免全局状态来隔离测试——在 Jest 中使用 beforeEach(),或在 pytest 中使用 @pytest.fixture(scope='function')。

常用命令/API

  • Jest/Vitest:使用 npx jest --watchAll 以交互模式运行测试;使用 jest.mock('axios', () => ({ get: jest.fn().mockResolvedValue({ data: {} }) })); 模拟模块。API:使用 expect(value).toEqual(expected) 进行断言。
  • pytest:使用 pytest tests/ -v --cov 执行测试并生成覆盖率;使用 def test_function(monkeypatch): monkeypatch.setattr('module.func', lambda: 'stubbed') 存根函数。API:使用 @pytest.fixture 实现隔离,例如 def mock_db(): return {'query': lambda: []}。
  • Go(testify):使用 go test -v ./... 构建,并使用 testify 中的 mock.Mock;例如,mockCtrl := gomock.NewController(t); mockObj := NewMockInterface(mockCtrl); mockObj.EXPECT().Method().Return(value)。
  • RSpec:通过 rspec spec/ 运行;使用 double('Object', method: -> 'stubbed') 创建双重对象。API:使用 expect { code }.to change { something }。
  • XCTest:使用 xcodebuild test 编译并运行;在 Swift 中使用 protocol 存根进行模拟,例如 class MockService: ServiceProtocol { func fetchData() -> Data { return Data() } }。
  • JUnit5:通过 ./gradlew test 执行;使用 Mockito:@ExtendWith(MockitoExtension.class) public class TestClass { @Mock private Dependency dep; @InjectMocks private ClassUnderTest cut; }。如果集成外部服务,请设置 $API_KEY 等环境变量,以便在测试中进行身份验证。

集成说明

通过将单元测试嵌入 CI/CD 管道来集成此技能,例如,在 GitHub Actions 工作流中添加 Jest,并使用 run: npm test。对于多语言项目,可使用 Nx 等工具为 Jest 和 pytest 设置 monorepo。配置环境变量来存放密钥,例如,在测试运行器中导出 $DATABASE_URL。关联 Jest 的 Istanbul 或 pytest 的 Coverage.py 等代码覆盖率工具;调试时,确保模拟对象通过 --no-cov 标志遵循这些工具的设置。对于依赖 API 的测试,将 $SERVICE_API_KEY 等环境变量注入测试命令,例如 pytest --api-key=$SERVICE_API_KEY。

错误处理

以明确的方式处理常见错误:对于 Jest 中的断言失败,检查堆栈跟踪,并使用 jest.fn().mockImplementation() 调试模拟对象;如果未调用模拟对象,添加 .toHaveBeenCalled() 断言。在 pytest 中,通过 try/except 包装来捕获 fixture 错误,例如:def test_with_fixture(fix): try: fix.setup() except Exception as e: pytest.fail(str(e))。对于 Go,使用 testify 的 assert.NoError(t, err) 在出现错误时让测试失败。在 RSpec 中,使用 allow(double).to receive(:method).and_raise(Error) 处理 double。对于 JUnit5,使用 @Test(expected = Exception.class) 处理预期的失败。始终使用 stub 隔离容易出错的代码,以防止错误级联;使用 jest --debug 或 pytest -s 等详细输出标志重新运行,以获取详细信息。

具体使用示例

  1. Jest 模拟示例:要测试获取数据的函数,请模拟 fetch API:
    jest.mock('node-fetch'); const fetch = require('node-fetch'); fetch.mockResolvedValue({ json: () => Promise.resolve({ data: 'mocked' }) }); test('fetches data', async () => { expect(await fetchData()).toEqual('mocked'); });

  2. pytest Fixture 示例:要隔离依赖数据库的测试,请使用 fixture:
    import pytest @pytest.fixture def mock_db(): return {'query': lambda: [{'id': 1}]} def test_query(mock_db): assert mock_db['query']()[0]['id'] == 1

图关系

  • 相关:testing-integration(用于更全面的测试工作流)、code-debugging(用于修复测试失败)
  • 聚类:testing(作为测试集群的一部分)、code-execution(用于在隔离环境中运行测试)
  • 依赖:environment-setup(用于管理模拟对象等测试依赖)

评论

支持 Markdown