bcquality/microsoft/knowledge/testing/use-assert-isfalse-not-asserterror-for-boolean-checks.md
Michael Dieringer 12b7f73d24 Add 4 more AL/BC testing patterns from Luc van Vugt's fluxxus.nl blog
Fourth batch from CURABIS ApS, mined from an external BC/NAV testing expert's blog archive (fluxxus.nl). Confirm+StrSubstNo interaction with ConfirmHandler, Table Relation Test's OnAfterRemoveTableRelation exclusion hook (verified against BCApps source, codeunit 134926), committing shared lazy-Initialize fixture data, and Assert.IsFalse vs asserterror for boolean checks.
2026-09-21 22:48:57 +02:00

1.3 KiB

bc-version domain keywords technologies countries application-area
all
testing
assert
isfalse
istrue
asserterror
boolean-check
negative-test
al
w1
all

Use Assert.IsFalse to check a boolean result, not asserterror around Assert.IsTrue

Description

asserterror exists to assert that a statement raises a runtime error; it is not a general-purpose way to invert a boolean check. Wrapping asserterror Assert.IsTrue(SomeFunc(), Msg) to verify that SomeFunc() returns false tests whether Assert.IsTrue's own error-raising behavior fired, not the value SomeFunc() actually returned.

Best Practice

When the code under test returns a Boolean rather than raising an error, assert the value directly with Assert.IsFalse(SomeFunc(), Msg) (or Assert.IsTrue for the positive case). Reserve asserterror for statements expected to actually raise an error.

See sample: use-assert-isfalse-not-asserterror-for-boolean-checks.good.al.

Anti Pattern

asserterror Assert.IsTrue(SomeFunc(), Msg); to verify SomeFunc() is false. It passes today because Assert.IsTrue happens to raise an error on failure, but it verifies the assertion helper's error-raising behavior, not the value under test.

See sample: use-assert-isfalse-not-asserterror-for-boolean-checks.bad.al.