QT Test Framework for C ++の各テストケースにかかる時間を知る簡単な方法はありますか?
いくつかのメトリックを取得するのに非常に役立ちます。
QT Test Framework for C ++の各テストケースにかかる時間を知る簡単な方法はありますか?
いくつかのメトリックを取得するのに非常に役立ちます。
作成時に通常は単調な経過タイマーを開始し、削除時に経過時間を出力するカスタムタイマークラスを作成できます(を参照QElapsedTimer::elapsed()
)。
timer.h:
#include <QElapsedTimer>
class Timer {
public:
Timer() {
timer.start();
}
~Timer() {
qint64 ms = timer.elapsed();
qDebug("Time needed: %s ms%s", ms,
timer.isMontonic() ? "" : " (WARNING: non-monotonic)");
}
private:
QElapsedTimer timer;
}
QElapsedTimer
overを使用する利点QTime
は、Qtが各プラットフォームで利用可能な最良の単調タイマーを使用しようとすることです。QTime
モントニックであることが保証されているわけではありません。時刻同期デーモン/サービスが時計を調整するときなどに減少します。
Timer t;
次に、時間を測定する各テストケースの先頭に行を挿入します。これ以上のコードはありません。これは単にTimer
オブジェクトを作成し、内部タイマーを開始し、スコープから外れると(メソッドの最後にある)オブジェクトを削除して、経過時間を出力します。
テストケース(.cpp):
#include "timer.h"
...
void TestClass::myTestCase1()
{
Timer t; //the only line needed to add to your test case
... //the code for test case
}
void TestClass::myTestCase2()
{
Timer t; //the only line needed to add to your test case
... //the code for test case
}
...
time_t t = time(0);
エポックからのミリ秒単位で時間変数を定義し、それを現在の瞬間に設定します。テスト前にこれらの1つを発射し、テスト後に1つを発射し、2つを比較して、テストにかかった時間を取得します。cbamber85が指摘したように、それは多くのことによって異なります。したがって、メトリックに何かを意味させたい場合は、プラットフォームを安定させる必要があります(それでも、相対的なものとしてのみ重要です)が、少なくとも何かで作業できます。