testing-guide
npx skills add https://github.com/ab300819/skills --skill testing-guide
Agent 安装分布
Skill 文档
Testing Guide
ç¼åé«è´¨éæµè¯ç约æè§èï¼ç¡®ä¿æµè¯çæ£éªè¯è¡ä¸ºèéä» ä» è¦ç代ç ã
Language
- Accept questions in both Chinese and English
- Always respond in Chinese
Trigger Conditions
- ç¨æ·æ£å¨ç¼åæµè¯ä»£ç
- ç¨æ·éè¦æµè¯çç¥æå¯¼
- ç¨æ·æå°æµè¯è¦ççãæè¨ãå弿µè¯
- ç¨æ·è¦æ±åæä»£ç 忝è¦çæ åµ
- Code Review 䏿¶åæµè¯ä»£ç
- å ³é®è¯ï¼”忝忔ã”branch analysis”ã”æªæµè¯è·¯å¾”ã”è¦çç²åº”
æ ¸å¿ç念
æµè¯çç®ç䏿¯"è¦ç代ç "ï¼èæ¯"éªè¯è¡ä¸º"ã
æµè¯ä¾æ®æ¥èªéæ±ï¼ä¸æ¯æ¥èªä»£ç ã
æµè¯è´¨ééåå¡
Level 3: æµè¯æææ§ â åå¼å¾åâ¥80%, éæ±è¿½æº¯100%
Level 2: æè¨è´¨é â ç¦æ¢å¼±æè¨, éªè¯è¡ä¸ºéå®ç°
Level 1: 代ç è¦ç â è¡/忝è¦çâ¥80% (å¿
è¦éå
å)
详ç»è¯´æè§ templates/core-concepts.md
Constraints
åå æµè¯çº¦æ
- æ¯ä¸ªæµè¯å¿ é¡»æ â¥1 ä¸ªå ·ä½æè¨
- ç¦æ¢å¼±æè¨ä½ä¸ºå¯ä¸æè¨ (
toBeDefined,toBeTruthy,not.toBeNull) - æµè¯åç§°å¿ é¡»æè¿°é¢æè¡ä¸º
- æµè¯ä¾æ®æ¥èªéæ±ï¼ä¸æ¯ä»£ç
- åª Mock å¤é¨ä¾èµï¼ä¸ Mock å é¨å®ç°
- æ¯ä¸ªæµè¯åªéªè¯ä¸ä¸ªè¡ä¸º
è¯¦ç»æåè§ templates/unit-testing.md
è¦çç约æ
- è¡è¦çç ⥠80%
- 忝è¦çç ⥠80%
- è¦ççæ¯å¿ è¦æ¡ä»¶ï¼ä¸æ¯å 忡件
å弿µè¯çº¦æï¼æ¨èï¼
- åå¼å¾å ⥠60%ï¼å»ºè®® ⥠80%ï¼
- æ ¸å¿ä¸å¡é»è¾åå¼å¾å ⥠80%
é ç½®è§ templates/mutation-testing.md
éææµè¯çº¦æ
- å¿ é¡»éªè¯æ¨¡åé´æ°æ®æµ
- å¿ é¡»éªè¯æ¥å£å¥çº¦
- æµè¯æ°æ®å¿ é¡»ç¬ç«
è¯¦ç»æåè§ templates/integration-testing.md
E2E æµè¯çº¦æ
- P0 åºæ¯å¿ é¡» 100% è¦ç
- ä½¿ç¨æ¾å¼çå¾ ï¼ç¦æ¢ç¡¬ç¼ç å»¶æ¶
- æµè¯å¿ é¡»å¯ç¬ç«è¿è¡
è¯¦ç»æåè§ templates/e2e-testing.md
éæ±è¿½æº¯çº¦æ
- æ¯ä¸ªéæ±å¿ é¡»æå¯¹åºæµè¯
- æµè¯ä»£ç åºæ æ³¨éæ±ID
模æ¿è§ templates/traceability-matrix.md
æµè¯éª¨æ¶çæ
AI 驱å¨çèªé¡¶åä¸å¼åï¼å çææµè¯éª¨æ¶ï¼åå¡«å å®ç°ã
æ æ³¨è§è
æµè¯ä»£ç å¿
é¡»å
å«è¿½æº¯æ 注ï¼ç¨äº /devdocs-sync --trace æ«æï¼
/**
* @verifies AC-XXX - éªæ¶æ åæè¿°
* @testcase UT/IT/E2E-XXX
*/
test('æµè¯åç§°', () => {
// æµè¯ä»£ç
});
| æ æ³¨ | ç¨é | å¿ é¡»æ§ |
|---|---|---|
@verifies AC-XXX |
å ³èéªæ¶æ å | å¿ é¡» |
@testcase UT/IT/E2E-XXX |
æµè¯ç¨ä¾ç¼å· | å¿ é¡» |
骨æ¶çææµç¨
03-test-cases.md (æµè¯ç¨ä¾è®¾è®¡)
â
â¼
çææµè¯éª¨æ¶
âââ describe ç»æï¼æåè½ç¹åç»ï¼
âââ test.skip() å ä½ï¼æ¯ä¸ªæµè¯ç¨ä¾ï¼
âââ @verifies/@testcase æ æ³¨
âââ // TODO: å®ç°æµè¯ 注é
â
â¼
é个å®ç°æµè¯
âââ ç§»é¤ skip
âââ ç¼å AAA ç»æ
âââ æ·»å å
·ä½æè¨
骨æ¶ç¤ºä¾
// tests/user.service.test.ts
describe('UserService', () => {
describe('createUser', () => {
/**
* @verifies AC-001 - é®ç®±æ ¼å¼æ ¡éª
* @testcase UT-001
*/
test.skip('åºè¯¥æç»æ æé®ç®±æ ¼å¼', () => {
// TODO: å®ç°æµè¯
// Arrange: å夿 æé®ç®±
// Act: è°ç¨ createUser
// Assert: éªè¯æåº ValidationError
});
/**
* @verifies AC-002 - å¯ç å¼ºåº¦æ ¡éª
* @testcase UT-002
*/
test.skip('åºè¯¥æç»å¼±å¯ç ', () => {
// TODO: å®ç°æµè¯
});
/**
* @verifies AC-003 - ç¨æ·åå¯ä¸æ§
* @testcase UT-003
*/
test.skip('åºè¯¥æç»éå¤ç¨æ·å', () => {
// TODO: å®ç°æµè¯
});
});
});
骨æ¶çæçº¦æ
- å¿
须使ç¨
test.skip()ætest.todo()æ è®°æªå®ç°æµè¯ - å¿
须添å
@verifieså@testcaseæ æ³¨ - å¿ é¡»æåè½ç¹ (F-XXX) ç»ç» describe ç»æ
- å¿ é¡»å¨æ³¨éä¸æç¤º AAA ç»æ
- æµè¯åç§°å¿ é¡»æè¿°é¢æè¡ä¸º
- ä¸ä¸ªæµè¯åªéªè¯ä¸ä¸ª AC
ä¸ DevDocs åä½
| é¶æ®µ | Skill | è¾å ¥ | è¾åº |
|---|---|---|---|
| æµè¯è®¾è®¡ | /devdocs-test-cases |
éæ±ææ¡£ | æµè¯ç¨ä¾ç©éµ |
| 骨æ¶çæ | /devdocs-dev-tasks |
æµè¯ç¨ä¾ | æµè¯éª¨æ¶ä»£ç |
| æµè¯å®ç° | /testing-guide |
骨æ¶ä»£ç | 宿´æµè¯ |
| è¿½æº¯åæ¥ | /devdocs-sync --trace |
ä»£ç æ 注 | æ´æ°ç©éµ |
代ç 忝è¦çåæï¼AI 驱å¨ï¼
代ç å®ç°å®æåï¼AI åæææä»£ç åæ¯ï¼æ¾åºæªè¢«æµè¯è¦ççè·¯å¾ï¼çæè¡¥å æµè¯ç¨ä¾ã è¿æ¯å¯¹éæ±é©±å¨æµè¯ï¼AC â æµè¯ï¼çè¡¥å ï¼ä¸æ¯æ¿ä»£ã
å®ä½
鿱驱卿µè¯ï¼AC â æµè¯ï¼ â 主路å¾ï¼è¦çä¸å¡è§å
ï¼
代ç 忝åæï¼ä»£ç â æµè¯ï¼ â è¡¥å
è·¯å¾ï¼è¦çé²å¾¡æ§é»è¾
ï¼
宿´æµè¯è¦ç
éç¨åºæ¯
| åºæ¯ | 说æ |
|---|---|
| 代ç å å«é²å¾¡æ§é»è¾ | åæ°æ ¡éªãnull æ£æ¥ãç±»åä¿æ¤ |
| 夿æ¡ä»¶åæ¯ | switch/caseã夿¡ä»¶ç»å |
| è¦ççå·¥å ·æ¾ç¤ºåæ¯ä¸è¶³ | è¡è¦çâ¥80% ä½åæ¯è¦ç<80% |
| å弿µè¯åç°åæ´»åå¼ä½ | è¡¥å æµè¯ä»¥ææ»åå¼ä½ |
åææµç¨
Step 1: åæä»£ç 忝
âââ æ¡ä»¶è¯å¥ï¼if/else, switch, ä¸å
, &&/||ï¼
âââ å¼å¸¸å¤çè·¯å¾ï¼try/catch, throwï¼
âââ æ©è¿åï¼guard clauseï¼
âââ 循ç¯è¾¹çï¼ç©ºéåãåå
ç´ ãå¤å
ç´ ï¼
â
â¼
Step 2: æ å°ç°ææµè¯
âââ å¹é
@verifies æ æ³¨ç AC è¦çèå´
âââ åææ¯ä¸ªæµè¯å®é
触åç忝
âââ æ è®°å·²è¦ç/æªè¦ç忝
â
â¼
Step 3: çæè¡¥å
æµè¯
âââ 为æªè¦çåæ¯çææµè¯ç¨ä¾
âââ ä½¿ç¨ BCA-XXX ç¼å·
âââ æ·»å @covers-branch æ æ³¨
âââ éµå¾ª AAA ç»æåæè¨è´¨é约æ
æ æ³¨è§è
/**
* @covers-branch createUser:null-email-guard
* @testcase BCA-001
*/
test('createUser åºè¯¥æåºéè¯¯å½ email 为 null', () => {
// Arrange
const dto = { email: null, password: 'Strong1234' };
// Act & Assert
expect(() => createUser(dto)).toThrow('Email is required');
});
| æ æ³¨ | ç¨é | å¿ é¡»æ§ |
|---|---|---|
@covers-branch <彿°>:<忝æè¿°> |
æ è®°è¦çç代ç 忝 | å¿ é¡» |
@testcase BCA-XXX |
åæ¯è¡¥å æµè¯ç¼å· | å¿ é¡» |
忝è¦çåæçº¦æ
- 忝åæå¨éæ±é©±å¨æµè¯ä¹åæ§è¡ï¼å AC æµè¯ï¼ååæ¯è¡¥å ï¼
- è¡¥å æµè¯å¿ é¡»æ æ³¨ @covers-branchï¼åºå鿱驱å¨ååæ¯è¡¥å ï¼
- è¡¥å æµè¯ä½¿ç¨ BCA-XXX ç¼å·ï¼ä¸å ç¨ UT/IT/E2E ç¼å·ç©ºé´ï¼
- è¡¥å æµè¯åæ ·éµå¾ªæè¨è´¨é约æï¼ç¦æ¢å¼±æè¨ï¼
- 忝åæä¸æ¹å鿱驱卿µè¯çä¼å 级
详ç»åææµç¨å示ä¾è§ templates/branch-coverage-analysis.md
Quick Reference
æµè¯å½å
[è¢«æµæ¹æ³] åºè¯¥ [颿è¡ä¸º] å½ [æ¡ä»¶]
æµè¯ç»æ (AAA)
Arrange â Act â Assert (å
·ä½æè¨)
ç¦æ¢çå¼±æè¨
// â ç¦æ¢
expect(result).toBeDefined();
expect(result).toBeTruthy();
expect(result).not.toBeNull();
// â
è¦æ±
expect(result.status).toBe('success');
expect(result.items).toHaveLength(3);
常ç¨å½ä»¤
# è¦çç
npm test -- --coverage # Jest
pytest --cov=src # pytest
go test -cover ./... # Go
# å弿µè¯
npx stryker run # JS/TS
mutmut run # Python
mvn pitest:mutationCoverage # Java
模æ¿ç´¢å¼
æ ¸å¿æå
| æ¨¡æ¿ | 说æ |
|---|---|
| core-concepts.md | æµè¯æ ¸å¿ç念ä¸è´¨ééåå¡è¯¦è§£ |
| unit-testing.md | åå æµè¯å®æ´æå |
| integration-testing.md | éææµè¯çç¥ä¸ç¤ºä¾ |
| e2e-testing.md | E2E æµè¯æä½³å®è·µ |
å·¥å ·é ç½®
| æ¨¡æ¿ | 说æ |
|---|---|
| branch-coverage-analysis.md | AI 驱å¨ç代ç 忝è¦çåæè¯¦è§£ |
| mutation-testing.md | 8ç§è¯è¨å弿µè¯é ç½® |
| ci-integration.md | CI/CD éæé ç½® |
| traceability-matrix.md | éæ±è¿½æº¯ç©éµ |
| test-examples.md | æµè¯ä»£ç 示ä¾é |
è¯è¨æä½³å®è·µ
| è¯è¨ | æ¡æ¶ | æ¨¡æ¿ |
|---|---|---|
| JavaScript/TypeScript | Jest, Vitest | best-practices/jest-vitest.md |
| Python | pytest | best-practices/pytest.md |
| Java | JUnit 5 | best-practices/junit5.md |
| C# / .NET | xUnit, NUnit | best-practices/xunit.md |
| Go | testing, testify | best-practices/go.md |
| Rust | cargo test | best-practices/rust.md |
| Swift | XCTest | best-practices/swift.md |
| C/C++ | Google Test | best-practices/googletest.md |
ä¸å ¶ä» Skills åä½
| åºæ¯ | Skill |
|---|---|
| æµè¯ç¨ä¾è®¾è®¡ | /devdocs-test-cases |
| 代ç 坿µè¯æ§ | /code-quality |
| éæåæµè¯ | /refactor |
| 忝è¦çåæ | /devdocs-dev-workflow â å®ææ£æ¥é¶æ®µå¯éè°ç¨ |