Serg recent wrote an introduction to unit testing under Lazarus [1], showing how everything is there, but just that little bit “off” because of different unit names between FPCUnit and DUnit.
Not being a fan of ifdef, the prospect of having unit tests “uses” sections littered with ifdef did not attract me, so I made a little adapter unit [2] to keep the “uses” sections clean.
It simply aliases the useful unit tests classes and units and goes like:
unit dwsXPlatformTests;
interface
uses
Classes, SysUtils,
{$ifdef FPC}
fpcunit, testutils, testregistry
{$else}
TestFrameWork
{$endif}
;
type
{$ifdef FPC}
TTestCase = fpcunit.TTestCase;
{$else}
TTestCase = TestFrameWork.TTestCase;
{$endif}
procedure RegisterTest(const testName : String; aTest : TTestCaseClass);
implementation
// RegisterTest
//
procedure RegisterTest(const testName : String; aTest : TTestCaseClass);
begin
{$ifdef FPC}
testregistry.RegisterTest(aTest);
{$else}
TestFrameWork.RegisterTest(testName, aTest.Suite);
{$endif}
end;
With it, unit test cases can just refer “dwsXPlatformTests”, which encapsulates the ugly ifdef’ing.