You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
![]() |
8 months ago | |
---|---|---|
.. | ||
muleunit | 8 months ago | |
tests | 8 months ago | |
CMakeLists.txt | 4 years ago | |
Makefile.am | 14 years ago | |
README | 4 years ago |
README
UnitTests provide an easy way to perform automated testing (including)
regression-testing and are desbribed in depth at
http://c2.com/cgi/wiki?UnitTest
The UnitTest framework MuleUnit is a minimalistic UnitTesting-framework
based on the EasyUnit framework, with the goal of making testing of the
aMule codebase easier.
How to use:
This section describes the step-by-step of creating a new testcase.
It is recommended that each test-case (a collection of tests) is
placed in a separate .cpp file, in general, one test-case per class.
In the following examples, I will test a non-existing stack template
class which has the member-functions push (back) and pop (front).
1) Creating the test skeleton:
Test-cases exist in two flavors: With a fixture and without.
A fixture is a way to ease the preparation before and after
each test and consists of (optionally) a setUp function which
is run before each unittest, a tearDown function which is run
after each unittest and any number of member-variables and
helper-functions.
A simple testcase (in this case for the Stack class) is declared
like this, though the name "StackTest" may be anything.
#include <muleunit/test.h>
DECLARE_SIMPLE(StackTest);
If we wanted to have a default stack-object created before each test
and deleted afterwards, we could use a fixture, which is done like so:
#include <muleunit/test.h>
DECLARE(StackTest);
Stack<int>* m_stack;
//! Called before each test.
void setUp() {
m_stack = new Stack<int>();
}
//! Called after each test
void tearDown() {
delete m_stack;
}
END_DECLARE();
Both DECLARE statements creates a base-class from which the unittests
are derived, and the section between DECLARE(..) and END_DECLARE() are
used verbatim in the definition of said baseclass.
2) Writing Tests
To add an actual test to the test-case, the following is done:
TEST(StackTest, AStackTest)
{
<test here>
}
This will create and register a unittest to the StackTest
test-case which has the name "AStackTest". An simple example
of this can be seen here:
TEST(StackTest, PushAndPop)
{
m_stack->push(10);
ASSERT_EQUALS(10, m_stack->pop());
}
A test-case can have any number of unittests associated with it,
but each test in a test-case must be uniquely named.
3) Building the test
Assuming that the testcase described above has been placed in
tests/StackTest.cpp, the follow entry needs to be added to the
Makefile.am file in tests/:
StackTest_SOURCES = StackTest.cpp
StackTest_CXXFLAGS = $(CXXFLAGS)
StackTest_LDADD = $(LDADD)
And the TESTS variable must be updated to contain an entry for
the stack testcase: "StackTest"
At the moment, in order for the makefile to be updated with the
next test-case you need to execute the following from the
amule-dev/ dir:
$ automake unittests/tests/Makefile
$ ./configure <your options>
This only need to be done when the Makefile.am file has been
changed, not when test test-cases themselves are changed.
4) Running the test
Simply executing the make target check will execute all unittests
registered in the Makefile ("-s" is used for silent operation):
$ make -s check
Making check in tests
Test case "StackTest" SUCCEEDED with 0 failure(s) and 1 success(es):
Test "AStackTest" SUCCEEDED!
PASS: StackTest
==================
All 1 tests passed
==================
Should a test fail, the output will be like the following:
$ make -s check
Making check in tests
Test case "StackTest" FAILED with 1 failure(s) and 0 success(es):
Test "Foo" FAILED :
Failure: "Test failed." line 11 in StackTest.cpp
FAIL: StackTest
================================
1 of 1 tests failed
Please report to admin@amule.org
================================
5) More
More information about available test-macros can be found in the
muleunit/test.h header-file.