add-unit-test
GitHub为 Dolibarr ERP/CRM 项目生成符合规范的 PHP PHPUnit 单元测试。自动定位或创建测试文件,遵循命名与断言约定,确保测试独立、确定且无外部依赖。
Trigger Scenarios
Install
npx skills add Dolibarr/dolibarr --skill add-unit-test -g -y
SKILL.md
Frontmatter
{
"name": "add-unit-test",
"license": "MIT",
"description": "Creates PHP unit tests for Dolibarr ERP\/CRM functions and methods. Use when the user asks to add, write, create, or complete a PHPUnit test for Dolibarr, or mentions testing a specific function, method, or class in the Dolibarr codebase.\n",
"allowed-tools": [
"read_file",
"write_file",
"grep"
],
"user-invocable": true
}
Skill: Add a Unit Test for Dolibarr
When to Use This Skill
Use this skill whenever the user asks to create, modify, or complete a PHP unit test for the Dolibarr ERP/CRM project.
The goal is to produce a unit test that follows Dolibarr conventions and integrates cleanly into the existing PHPUnit test suite.
Inputs
The user request should contain, when available:
- a name of the function to test
- or the class method name to test
General Rules
- follow the coding style already used in files in the
test/phpunit/directory - modify the minimum amount of existing code
- prefer adding new test methods instead of modifying existing ones
- tests must be deterministic and independent
- avoid dependencies on external services
- clean up every object created during the test
Test Location
Locate the most appropriate existing PHPUnit test file in test/phpunit/.
If no suitable test file exists, create one using the naming convention FeatureTest.php.
Naming
A test method should describe the expected behavior.
Examples:
public function testCreateObject()
public function testDeleteObject()
public function testFetchReturnsExpectedValues()
public function testInvalidInputThrowsException()
Assertions
Prefer specific assertions over generic ones.
Good examples:
$this->assertTrue($result);
$this->assertFalse($result);
$this->assertEquals($expected, $actual);
$this->assertCount(3, $array);
$this->assertNull($value);
$this->assertNotNull($value);
Output
When generating code:
- provide only the relevant PHP code
- preserve the existing file formatting
- do not rewrite unrelated methods
- explain briefly what is being tested
Examples
Input: "Add a unit test for the create() method of the Invoice class"
Action:
- locate or create
test/phpunit/InvoiceTest.php - add test method following Dolibarr conventions
Input: "Write tests for the calculateVAT() function in price.lib.php"
Action:
- locate or create appropriate test file in
test/phpunit/ - add test methods for various VAT calculation scenarios
Error Handling
Common Failures and Validation
| Issue | Validation | Solution |
|---|---|---|
| Test file does not exist | Check test/phpunit/ directory |
Create new test file with proper naming |
| Class or method not found | Verify namespace and file location | Use proper use statements and class paths |
| Database dependencies | Review test for external DB calls | Mock database interactions or use test fixtures |
| Non-deterministic behavior | Check for random values or timestamps | Use fixed seeds or mock time |
| Missing PHPUnit | Check project dependencies | Ensure PHPUnit is installed via Composer |
Before generating code:
- verify the target function or method exists and is accessible
- confirm the test directory structure matches Dolibarr conventions
- ensure no external service dependencies exist in the code under test
Gotchas
- Dolibarr global variables: Tests may need
$conf,$db,$usermocks. UseDolibarrTestCaseif available - Entity filtering: Add
entity IN ('.getDolEntity('tablename').')to SQL in tests if needed - Permissions: Some methods check
$user->hasRight(). Mock user permissions in tests - File paths: Use
DOL_DOCUMENT_ROOTconstant for paths, not hardcoded values - Legacy code: Older modules may not have test files. Create new ones following current conventions
Version History
-
c58d901
Current 2026-08-16 07:27
优化了输入描述措辞,将 'make the unit test for' 改为更简洁的表述;修正了断言示例中数组变量名拼写错误。
- 8df0c16 2026-07-24 16:27


