The exercise
ConsiderationsForAndComparisonOfCeePlusPlusTestFrameworks
helped me understand what I did not like about
CppUnit.
First, I must admit that
CppUnit has greatly improved
over the last few years. It used to require far more redundant
typing than it does now. Nevertheless, I think it still
has problems.
Mainly,
CppUnit requires redundant typing. A test case must be
defined as a fixture in a method, and then linked into a suite.
It does not have a
TestCollector script.
CppUnit has been extended with macros that reduce
some, but not all, of this redundant typing.
However, these macros are non-syntactic C++ macros,
a code smell in and of themselves.
I think the fundamental problem is that
CppUnit
structures test cases as methods of a fixture,
and then binds the method to create an independent test case
object.
class ComplexNumberTest ...
void testEquality() { ...
};
CppUnit::TestCaller?<ComplexNumberTest>
test( "testEquality",
&ComplexNumberTest::testEquality );
This requires redundant typing that cannot be completely
hidden by macros, and which is hard to handle in simplistic
TestCollector scripts that do not understand C++,
e.g. that work line by line.
I think it is semantically equivalent,
and much more conducive to simple
TestCollector scripts,
to express test cases as void functions or classes
with a test() method, where the test fixture is
inherited by the test case.
It could also use VC++ itself as the test runner. See
VisualCeePlusPlus.
See
StarUnitAutoSuite.
CategoryCpp CategoryTesting