CxxTestを使い始めたばかりで、std::vectorが正しくソートされているかどうかをテストしたいと思います。これまでの私のテストは次のとおりです。
void testSort() {
std::sort(vec.begin(), vec.end()); // This could be any sorting function
for (unsigned int i = 0; i < vec.size() - 1; ++i) {
TS_ASSERT(vec[i] <= vec[i + 1]);
}
}
明らかに、CxxTestはアサーションを提供しませんTS_ASSERT_SORTED
が、カスタムアサーションを作成する方法はありますか?それは私がこれを行うことを可能にするでしょう:
void testSort() {
std::sort(vec.begin(), vec.end()); // This could be any sorting function
TS_ASSERT_SORTED(vec);
}
このように記述されていると、テストの意図を確認するのが非常に簡単になります。
CxxTestユーザーガイドを調べましたが、このようなカスタムアサーションを記述できるかどうかわかりませんでした。別の方法として、クラスIsSortedを作成し、そのを実装することもできますoperator()
。次に、次のようなテストを作成できます。
void testSort() {
std::sort(vec.begin(), vec.end()); // This could be any sorting function
TS_ASSERT_PREDICATE(IsSorted, vec);
}
これが正しいアプローチだと思います。ただし、これを行う場合はclass IsSorted
、テストスイートとは別に、の定義を独自のヘッダーファイルに配置する必要がありますか?特にこのフレームワークでは、単体テストに関連するベストプラクティスを理解しようとしています。
setUp()
最後の質問:メソッドまたはテスト自体でベクトルを並べ替える必要がありますか?