On 17 December 2011 18:03, Luciano de Souza wrote: > The idea of FPCUnit is really wonderful. I really would like to use it, but > Lazarus dependencies can complicate a lot.
I have been a long time user of FPCUnit and even helped to maintain and improve it over the years. It has some design flaws and limitations though, so is good for smaller projects and less complicated test suites. For a more feature complete testing suite, I would recommend the FPTest (Free Pascal Testing Framework) project instead. I am the current maintainer of FPTest - which is a fork/continuation of the DUnit2 testing framework created by the late Peter McNabb, but specifically tailored for the Free Pascal compiler. FPTest fixes all of the problems I experienced with FPCUnit. It supports Text and GUI (only fpGUI at the moment, but a LCL UI will follow shortly) test projects out of the box. No dependencies on any IDE (Lazarus IDE or otherwise), and no GUI toolkits are required either. The GUI UI does make the usage (and advanced features) much easier though - but it is by no means a requirement. The Text runner can do everything the GUI runner can. FPTest has a many more features than FPCUnit: multiple projects support, extended CheckXXX calls (known as AssertXXX in FPCUnit), improved error reporting, warning support, huge self-test testing frameworking, improved decorator tests (which are flawed in FPCUnit), improved Setup/TearDown and SetupOnce/TearDownOnce support etc. Here is a console sample testing project ---------------------[ project1.pas ]------------------------ program project1; {$mode objfpc}{$H+} uses Classes, TextTestRunner, sample_tests; begin // Register all tests sample_tests.RegisterTests; RunRegisteredTests; end. ---------------------------------[ end ]---------------------------------- and the unit containing the actual tests... -------------------------[ sample_tests.pas ]---------------------- unit sample_tests; {$mode objfpc}{$H+} interface uses TestFramework; type TTestCaseFirst = class(TTestCase) published procedure TestWarning; procedure TestOne; procedure TestTwo; procedure TestThree; end; TClassA = class(TTestCase) published procedure TestClassA1; procedure TestClassA2; virtual; end; TClassB = class(TClassA) published procedure TestClassA2; override; procedure TestClassB1; procedure TestError; end; procedure RegisterTests; implementation uses sysutils; procedure RegisterTests; begin TestFramework.RegisterTest(TTestCaseFirst.Suite); TestFramework.RegisterTest(TClassB.Suite); end; { TTestCaseFirst } procedure TTestCaseFirst.TestWarning; begin // Do nothing here - should cause a Warning end; procedure TTestCaseFirst.TestOne; begin Check(1 + 1 = 3, 'Catastrophic arithmetic failure!'); end; procedure TTestCaseFirst.TestTwo; begin Check(1 + 1 = 2, 'Catastrophic arithmetic failure!'); end; procedure TTestCaseFirst.TestThree; var s: string; begin s := 'hello'; CheckEquals('Hello', s, 'Failed CheckEquals'); end; { TClassA } procedure TClassA.TestClassA1; begin fail('TClassA.TestClassA1'); end; procedure TClassA.TestClassA2; begin Fail('This virtual method should never appear.'); end; { TClassB } procedure TClassB.TestClassA2; begin Fail('Test overridden method'); end; procedure TClassB.TestClassB1; begin sleep(2264); Fail('Test sleep() causing extra time'); end; procedure TClassB.TestError; var x, y: integer; begin x := 10; y := 0; Check(x / y = 0, 'Failed on 1'); end; end. ---------------------------------[ end ]---------------------------------- The source code is freely available from Github using the following command. git clone git://github.com/graemeg/fptest.git or git clone https://github.com/graemeg/fptest.git If you don't have git installed, you can always grab a source tarball too, using the following URL. https://github.com/graemeg/fptest/tarball/master FPTest documentation can be found in the 'docs' directory as HTML files. The FPTest project is still under active development, so things are constantly improved. For this reason I highly recommend you get the source code via git, instead of as a tarball. Good news is that you are not forced to choose either or testing frameworks. Years ago I included a DUnit/FPTest compatibility interface to FPCUnit. This gives you a nice upgrade path from FPCUnit to FPTest. So if you design your test suites using the CheckXXX calls and not the AssertXXX calls, then later you can easily switch to the FPTest framework without any need for changing your testing code. -- Regards, - Graeme - _______________________________________________ fpGUI - a cross-platform Free Pascal GUI toolkit http://fpgui.sourceforge.net _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal