0

QT Test Framework for C ++の各テストケースにかかる時間を知る簡単な方法はありますか?

いくつかのメトリックを取得するのに非常に役立ちます。

4

2 に答える 2

2

作成時に通常は単調な経過タイマーを開始し、削除時に経過時間を出力するカスタムタイマークラスを作成できます(を参照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;
}

QElapsedTimeroverを使用する利点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
}
...
于 2012-06-01T14:02:46.120 に答える
1

time_t t = time(0);エポックからのミリ秒単位で時間変数を定義し、それを現在の瞬間に設定します。テスト前にこれらの1つを発射し、テスト後に1つを発射し、2つを比較して、テストにかかった時間を取得します。cbamber85が指摘したように、それは多くのことによって異なります。したがって、メトリックに何かを意味させたい場合は、プラットフォームを安定させる必要があります(それでも、相対的なものとしてのみ重要です)が、少なくとも何かで作業できます。

于 2012-06-01T13:11:25.493 に答える