下面是使用这些宏重写了类ComplexNumberTest后的代码:
#include <cppunit/extensions/HelperMacros.h>
class ComplexNumberTest : public CppUnit::TestFixture {
首先我们声明这个suite,把这个类的名字传递给宏:
CPPUNIT_TEST_SUITE( ComplexNumberTest );
这个使用静态的suite() method建立的suite以类的名字来命名。然后,我们为每个测试用例声明:
CPPUNIT_TEST( testEquality );
CPPUNIT_TEST( testAddition );
后,我们结束这个suite声明:
CPPUNIT_TEST_SUITE_END();
在这里下面这个method已经被实现了:
static CppUnit::TestSuite *suite();
剩下的fixture保持不动:
private:
Complex *m_10_1, *m_1_1, *m_11_2;
protected:
void setUp()
{
m_10_1 = new Complex( 10, 1 );
m_1_1 = new Complex( 1, 1 );
m_11_2 = new Complex( 11, 2 );
}
void tearDown()
{
delete m_10_1;
delete m_1_1;
delete m_11_2;
}
void testEquality()
{
CPPUNIT_ASSERT( *m_10_1 == *m_10_1 );
CPPUNIT_ASSERT( !(*m_10_1 == *m_11_2) );
}
void testAddition()
{
CPPUNIT_ASSERT( *m_10_1 + *m_1_1 == *m_11_2 );
}
};
加入这个suite的TestCaller的名字是这个fixture名字和method名字的组合。
对目前这个用例来说,名字会是"ComplexNumberTest.testEquality" 和"ComplexNumberTest.testAddition".
helper macros帮你写些常用的断言。例如。检查当一个数被零除的时候ComplexNumber是否会抛出MathException异常:
*把这个测试用例加入使用CPPUNIT_TEST_EXCEPTION的suite中,指定希望的异常的类型。
*写这个测试用例的method
CPPUNIT_TEST_SUITE( ComplexNumberTest );
// [...]
CPPUNIT_TEST_EXCEPTION( testDivideByZeroThrows, MathException );
CPPUNIT_TEST_SUITE_END();
// [...]
void testDivideByZeroThrows()
{
// The following line should throw a MathException.
*m_10_1 / ComplexNumber(0);
}
如果期望的异常没有被抛出,这个断言会失败。