mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-10-05 14:46:55 +01:00
- al-testing-review.md: the generic ExpectedError cue's asserterror Assert.IsTrue/IsFalse exclusion was unconditional, but the specialized rule it deferred to only claims the pure-inversion shape. A test expecting the guarded Boolean-returning call itself to raise fell through both routes. Narrowed the exclusion to the same inversion-only condition the specialized cue already uses. - asserterror-needs-expectederror-and-code.md: the rollback-sentinel exception (a trailing asserterror Error(...) used purely to force a fixture rollback, not to verify a specific failure) previously lived only in skill routing prose. Encoded it directly in the article's Anti Pattern section so every consumer of the knowledge base sees it, not just this one skill. - commit-shared-test-fixture-inside-lazy-initialize.good.al/.bad.al: replaced hand-rolled Item.Init()/Insert(true) with LibraryInventory.CreateItem, so the canonical fixture doesn't itself trigger use-library-codeunits-for-test-fixtures. - table-relation-test-exclude-known-invalid-relations-via-event.good.al/ .bad.al: declared minimal "Sample Setup"/"Sample Header" tables inline instead of referencing undefined symbols, matching this repo's own convention that every fixture is self-contained.
71 lines
1.8 KiB
AL
71 lines
1.8 KiB
AL
codeunit 50142 "Sample Test Library"
|
|
{
|
|
Subtype = Test;
|
|
|
|
var
|
|
LibraryInventory: Codeunit "Library - Inventory";
|
|
Initialized: Boolean;
|
|
SharedItemNo: Code[20];
|
|
RollBackMsg: Label 'Revert back the tables to their original state.';
|
|
|
|
local procedure Initialize()
|
|
begin
|
|
if Initialized then
|
|
exit;
|
|
|
|
CreateSharedFixtureData();
|
|
Commit();
|
|
Initialized := true;
|
|
end;
|
|
|
|
local procedure CreateSharedFixtureData()
|
|
var
|
|
Item: Record Item;
|
|
begin
|
|
LibraryInventory.CreateItem(Item);
|
|
SharedItemNo := Item."No.";
|
|
end;
|
|
|
|
[Test]
|
|
procedure FirstTestUsesSharedFixture()
|
|
var
|
|
Item: Record Item;
|
|
begin
|
|
Initialize();
|
|
|
|
Item.Get(SharedItemNo);
|
|
Item.Description := 'Scratch change this test makes and does not need to keep.';
|
|
Item.Modify();
|
|
|
|
asserterror Error(RollBackMsg);
|
|
// Rolls back the Modify() above, but not the fixture: that was
|
|
// already committed inside Initialize().
|
|
end;
|
|
|
|
[Test]
|
|
procedure SecondTestStillFindsSharedFixture()
|
|
var
|
|
Item: Record Item;
|
|
begin
|
|
// Runs after FirstTestUsesSharedFixture's deliberate rollback.
|
|
// Initialize() sees Initialized = true and does nothing, but the
|
|
// committed fixture it created earlier is still there to Get().
|
|
Initialize();
|
|
|
|
Item.Get(SharedItemNo);
|
|
end;
|
|
}
|
|
|
|
codeunit 50143 "Sample Test Runner"
|
|
{
|
|
// Codeunit isolation: everything this codeunit's tests commit,
|
|
// including the shared fixture, survives from one test method to the
|
|
// next, and rolls back only once every method in the codeunit has run.
|
|
Subtype = TestRunner;
|
|
TestIsolation = Codeunit;
|
|
|
|
trigger OnRun()
|
|
begin
|
|
Codeunit.Run(Codeunit::"Sample Test Library");
|
|
end;
|
|
}
|