Unittest++:試験のための複数指定できる値
-
22-09-2019 - |
質問
私は現在、実施を簡単線トレーサーのc++.いという名前のクラスOrthonormalBasis生成する三つのユニット直交ベクトルからは二つの指定されたベクター、例えば:
void
OrthonormalBasis::init_from_u ( const Vector& u )
{
Vector n(1,0,0);
Vector m(0,1,0);
u_ = unify(u);
v_ = cross(u_,n);
if ( v_.length() < ONB_EPSILON )
v_ = cross(u_,m);
w_ = cross(u_,v_);
}
いまではすべて私の方法をUnittest++の枠組み問題は、ありきのための有効なorthonormalます。例えばこの試験:
TEST ( orthonormalbasis__should_init_from_u )
{
Vector u(1,0,0);
OrthonormalBasis onb;
onb.init_from_u(u);
CHECK_EQUAL( Vector( 1, 0, 0 ), onb.u() );
CHECK_EQUAL( Vector( 0, 0, 1 ), onb.v() );
CHECK_EQUAL( Vector( 0, 1, 0 ), onb.w() );
}
も成功し、時には失敗したので、ベクトルv、wがあることを確認した。負の1が表す有効なorthonormalます。があるので、複数指定予定。やんもいた。
とが重要であることを取得し、実際に期待される価値印刷の標準出力に出力し、デバッグの方法で本ソリューションとしている
TEST ( orthonormalbasis__should_init_from_u )
{
Vector u(1,0,0);
OrthonormalBasis onb;
onb.init_from_u(u);
CHECK_EQUAL( Vector( 1, 0, 0 ), onb.u() );
CHECK(
Vector( 0, 0, 1 ) == onb.v() ||
Vector( 0, 0,-1 ) == onb.v() );
CHECK(
Vector( 0, 1, 0 ) == onb.w() ||
Vector( 0,-1, 0 ) == onb.w() );
}
解決
きっと、あなたがテストしているすべてはあなたの基礎が正規直交であるかどうかである場合、その後、あなたがテストする必要があるの何という?
// check orthogonality
CHECK_EQUAL( 0, dot(onb.u(), onb.v));
CHECK_EQUAL( 0, dot(onb.u(), onb.w));
CHECK_EQUAL( 0, dot(onb.v(), onb.w));
// check normality
CHECK_EQUAL( 1, dot(onb.u(), onb.u));
CHECK_EQUAL( 1, dot(onb.v(), onb.v));
CHECK_EQUAL( 1, dot(onb.w(), onb.w));
他のヒント
一つの可能性を自分のCHECK_MULTI機能:
void CHECK_MULTI(TYPE actual, vector<TYPE> expected, const char* message)
{
for (element in expected) {
if (element == actual) {
// there's a test here so the test count is correct
CHECK(actual, element);
return;
}
}
CHECK(actual, expected);
}
あなたはこのような何かを行うことができますので、
私はユーティリティ関数やクラスを使用すると思います:
CHECK_EQUAL(VectorList(0,0,1)(0,0,-1), onb.v());
を考えると、平等の解釈はやや奇妙ですが、それはあなたがカスタムマクロを導入する必要なしに見たいすべての値を印刷する必要があります。
あなたがそのコンテキストでEQUAL
を心配している場合は、CHECK_CONTAINS()
などのカスタムマクロを実行するにはあまりにも難しいことではありません。
VectorList
一時とoperator()
ように構成されることになるが、 Boost.Assign
Vector
sの含有リストに値を挿入するために使用され
基本的なアプローチます:
class VectorList {
std::vector<Vector> data_;
public:
VectorList(double a, double b, double c) {
data_.push_back(Vector(a,b,c));
}
VectorList& operator()(double a, double b, double c) {
data_.push_back(Vector(a,b,c));
return *this;
}
bool operator==(const Vector& rhs) const {
return std::find(data_.begin(), data_.end(), rhs) != data_.end();
}
};
所属していません StackOverflow