Copyright (c) 2007, 2008 Tero Koskinen <tero.koskinen@iki.fi>
Contents:
Ahven is a unit test library modeled after JUnit library for Java. So, for JUnit users the API should be familiar.
The heart of the library is an abstract
class called Test
. It has two subclasses,
Test_Case
, and Test_Suite
.
Test_Case
is the base class for other unit tests
and Test_Suite
is a container, which can hold
Test
objects.
For your first test case, you need to create a new package and a new
class, which is derived from Ahven.Framework.Test_Case.
Let's call the package My_Tests
and the class
My_Tests.Test
.
-- my_tests.ads
with Ahven.Framework;
package My_Tests is
type Test is new Ahven.Framework.Test_Case with null record;
end My_Tests;
After you have defined your class, you need to overload
Test_Case
's Initialize
procedure
and create your own test procedure (My_First_Test
).
-- my_tests.ads
with Ahven.Framework;
package My_Tests is
type Test is new Ahven.Framework.Test_Case with null record;
procedure Initialize (T : in out Test);
procedure My_First_Test;
end My_Tests;
Next you need to create the body of the My_Tests package.
In Initialize
procedure you need to do two things:
-- my_tests.adb
package body My_Tests is
procedure Initialize (T : in out Test) is
begin
Set_Name (T, "My tests");
Ahven.Framework.Add_Test_Routine
(T, My_First_Test'Access, "My first test");
end Initialize;
...
end My_Tests;
In the test procedure My_First_Test
you can do anything
you want. The Ahven package defines two utility procedures for you:
Assert (Condition : Boolean; Message : String)
and Fail (Message : String)
.
Assert
will raise Assertion_Error if
Condition
is False
.
Fail
does what its name implies and will raise
Assertion_Error
always.
These Assertion_Error
s will show as failures when you
run the tests.
Here is an example:
-- my_tests.adb
with Ahven;
use Ahven;
package body My_Tests is
procedure Initialize (T : in out Test) is
begin
Set_Name (T, "My tests");
Framework.Add_Test_Routine
(T, My_First_Test'Access, "My first test");
end Initialize;
procedure My_First_Test is
begin
Assert (1 /= 4, "1 /= 4 failed!");
end My_First_Test;
end My_Tests;
To run your tests you need to feed them to a test runner.
For example, Ahven.Text_Runner.Run
runs the tests
and prints the results to the standard output.
The best way to run the tests is to define a Test_Suite, add the tests there, and give the test suite to the runner.
-- runner.adb
with Ahven.Text_Runner;
with Ahven.Framework;
with My_Tests;
procedure Runner is
S : Ahven.Framework.Test_Suite_Access :=
Ahven.Framework.Create_Suite ("All my tests");
begin
Ahven.Framework.Add_Test (S.all, new My_Tests.Test);
Ahven.Text_Runner.Run (S);
Ahven.Framework.Release_Suite (S);
-- Release_Suite will release all its children also.
end Runner;
Tero Koskinen, 2008-01-07