| name | run-tests |
| description | Execute AL test codeunits. Use al-runner for fast pure-logic tests (no BC required). Use bc-test for full integration tests against a running BC instance. |
/run-tests — Execute AL Tests
Two Test Runners
| Tool | When to use | BC required? | Speed |
|---|
al-runner | Pure-logic unit tests (in-memory tables, no pages/HTTP/events) | No | Milliseconds |
bc-test | Full integration tests against a running BC instance | Yes | Seconds–minutes |
al-runner (preferred for unit tests)
Full AI agent guide:
al-runner --guide
Basic usage:
al-runner ./src ./test
al-runner --packages .alpackages ./src ./test
al-runner --packages .alpackages --stubs ./stubs ./src ./test
al-runner --run TestMyProcedure ./src ./test
al-runner --coverage ./src ./test
al-runner --output-json ./src ./test
al-runner --output-junit results.xml ./src ./test
Exit codes:
| Code | Meaning |
|---|
| 0 | All tests passed |
| 1 | Real assertion failures |
| 2 | Runner limitations only (compilation gaps, missing mocks — not real failures) |
| 3 | AL compilation error |
Use exit code 2 to distinguish runner gaps from real failures in CI.
What al-runner supports: in-memory tables, CRUD, filters, cross-codeunit calls, interfaces, asserterror, JSON types, BLOB/InStream/OutStream, RecordRef/FieldRef, IsolatedStorage, TextBuilder, and more. See al-runner --guide for the full list.
What al-runner does NOT support: Pages, Reports, XMLports, HTTP calls, event subscribers. Inject these via AL interfaces or use --stubs.
bc-test (full BC integration)
Expects bc-test on PATH (from bc-linux or bc-tools).
bc-test --help
Use when tests require BC's service tier, events, UI flows, or features not supported by al-runner.
Behavior
- Determine which runner is appropriate for the test type
- Parse
$ARGUMENTS and pass through to the selected tool
- If there's an active task folder (
.dev/<task-slug>/), capture output to .dev/<task-slug>/test-results.txt
Handling Results
- All passing (al-runner exit 0): Report pass count. Note "Tests green."
- Exit 2 (al-runner): Runner limitations only. Not a real failure — add stubs or use bc-test for the blocked tests.
- Real failures: List each failed test with codeunit, method name, and error message. Offer to analyze and suggest fixes.
- No tests found: Check that test codeunits use
Subtype = Test and mark procedures with [Test].