mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-08-06 17:36:53 +01:00
71 lines
1.6 KiB
Markdown
71 lines
1.6 KiB
Markdown
---
|
|
bc-version: [all]
|
|
domain: testing
|
|
keywords: [test, library, setup, initialize, suppresscommit, asserterror]
|
|
technologies: [al]
|
|
countries: [w1]
|
|
application-area: [all]
|
|
---
|
|
|
|
## Description
|
|
|
|
In CURABIS test apps, all test setup is centralized in a dedicated Test Library
|
|
codeunit (e.g. `SV Test Library`). Individual test procedures must not call
|
|
BC standard library codeunits (`LibrarySales`, `LibraryInventory`, etc.) directly.
|
|
|
|
Additionally, two rules apply to every test that calls a posting codeunit:
|
|
|
|
1. `SetSuppressCommit(true)` must be called before `Run()` to prevent data
|
|
from leaking between tests.
|
|
2. `asserterror` must always be followed by `Assert.ExpectedErrorCode()` or
|
|
`Assert.ExpectedError()` — a naked `asserterror` passes on any error,
|
|
not just the expected one.
|
|
|
|
## Anti Pattern
|
|
|
|
```al
|
|
// WRONG: inline setup bypassing the test library
|
|
procedure MyTest()
|
|
var
|
|
Item: Record Item;
|
|
begin
|
|
LibraryInventory.CreateItem(Item); // do not call directly
|
|
// ...
|
|
end;
|
|
```
|
|
|
|
```al
|
|
// WRONG: posting without SuppressCommit
|
|
SVPost.Run(SVHeader); // commits to test database
|
|
```
|
|
|
|
```al
|
|
// WRONG: naked asserterror
|
|
asserterror SVPost.Run(SVHeader);
|
|
// no assertion follows — passes on any error
|
|
```
|
|
|
|
## Best Practice
|
|
|
|
```al
|
|
// CORRECT: delegate to test library
|
|
procedure MyTest()
|
|
var
|
|
Item: Record Item;
|
|
begin
|
|
SVLib.GivenScrapItem(Item); // test library owns setup
|
|
// ...
|
|
end;
|
|
```
|
|
|
|
```al
|
|
// CORRECT: SuppressCommit before Run
|
|
SVPost.SetSuppressCommit(true);
|
|
SVPost.Run(SVHeader);
|
|
```
|
|
|
|
```al
|
|
// CORRECT: asserterror followed by assertion
|
|
asserterror SVPost.Run(SVHeader);
|
|
Assert.ExpectedErrorCode('Dialog');
|
|
```
|