Итак, я ранее не был на самом деле в практике написания модульных тестов - теперь я вроде как, и мне нужно проверить, правильно ли я нахожусь на правильном пути.
Скажем, у вас есть класс, который занимается математическими вычислениями.
class Vector3
{
public: // Yes, public.
float x,y,z ;
// ... ctors ...
} ;
Vector3 operator+( const Vector3& a, const Vector3 &b )
{
return Vector3( a.x + b.y /* oops!! hence the need for unit testing.. */,
a.y + b.y,
a.z + b.z ) ;
}
Есть два способа, которые я действительно могу сделать, чтобы сделать unit test в классе Vector:
1) Рука-решить некоторые проблемы, затем жестко закодировать числа в unit test и передать только в том случае, если они равны вашей руке и жестко закодированному результату
bool UnitTest_ClassVector3_operatorPlus()
{
Vector3 a( 2, 3, 4 ) ;
Vector3 b( 5, 6, 7 ) ;
Vector3 result = a + b ;
// "expected" is computed outside of computer, and
// hard coded here. For more complicated operations like
// arbitrary axis rotation this takes a bit of paperwork,
// but only the final result will ever be entered here.
Vector3 expected( 7, 9, 11 ) ;
if( result.isNear( expected ) )
return PASS ;
else
return FAIL ;
}
2) Снова перепишите код вычисления внутри unit test.
bool UnitTest_ClassVector3_operatorPlus()
{
Vector3 a( 2, 3, 4 ) ;
Vector3 b( 5, 6, 7 ) ;
Vector3 result = a + b ;
// "expected" is computed HERE. This
// means all you've done is coded the
// same thing twice, hopefully not having
// repeated the same mistake again
Vector3 expected( 2 + 5, 6 + 3, 4 + 7 ) ;
if( result.isNear( expected ) )
return PASS ;
else
return FAIL ;
}
Или есть другой способ сделать что-то вроде этого?