![]() |
Home · All Namespaces · All Classes · Main Classes · Grouped Classes · Modules · Functions |
Nokia が提供する QTestLib フレームワークは Qt のアプリケーションやライブラリの為のユニットテストツールです。 QTestLib は一般的なユニットテストフレームワークに見られる全ての機能に加え、GUIのテストのための機能も拡張されています。
コンテンツ一覧
QTestLib は Qt ベースのアプリケーションとライブラリのためのユニットテストを簡単に記述できるようにデザインされています。
| 特徴 | 詳細 |
|---|---|
| 軽量 | QTestLib は約 6000 行のコードと 60 の公開されたシンボルから成ります。 |
| Self-contained | QTestLib は非GUIのテストのためにはたった数個の Qt Core ライブラリのシンボルしか必要としません。 |
| テストの速さ | QTestLib は特別な test-runner や特別な登録作業を必要としません。 |
| データ駆動テスト | テストは様々なテストデータに対して複数回実行することができます。 |
| 基本的な GUI テスト | QTestLib はマウスとキーボードのシミュレーション機能を提供します。 |
| ベンチマーク | QTestLib はベンチマーク及びいくつかの測定のためのバックエンドをサポートします。 |
| IDE との親和性 | QTestLib は Visual Studio と KDevelop で解釈できるメッセージを出力します。 |
| スレッドセーフ | エラー報告はスレッドセーフでアトミックです。 |
| 型セーフ | 広範囲なテンプレートの利用により、暗黙の型変換によるエラーを防ぐことができます。 |
| 拡張が簡単 | カスタム型もテストデータやテストの出力として簡単に追加できます。 |
ノート:より高機能な GUI とアプリケーションのテストについては Qt testing products provided by Nokia partnersを参照してください。
全ての public メソッドは QTest 名前空間の中にあります。さらに、 QSignalSpy クラスにより Qt のシグナルとスロットを簡単に観察することができます。
テストを作成するには、 QObject のサブクラスを作成し、いくつかの private スロットを追加してください。 それぞれの private スロットがテストの単位となります。 QTest::qExec() はこのテストオブジェクトの全てのテストを実行するために使用できます。
さらに、テスト関数として 扱われない private スロットが4つあります。 これらはテストフレームワークによって実行され、全体の初期化や終了処理、個々のテスト関数の初期化や終了処理の為に使用されます。
もし initTestCase() が失敗した場合、全てのテスト関数は実行されません。もし init() が失敗した場合、それに続くテスト関数は実行されず、次のテスト関数に移ります。
例:
class MyFirstTest: public QObject
{
Q_OBJECT
private slots:
void initTestCase()
{ qDebug("called before everything else"); }
void myFirstTest()
{ QVERIFY(1 == 1); }
void mySecondTest()
{ QVERIFY(1 != 2); }
void cleanupTestCase()
{ qDebug("called after myFirstTest and mySecondTest"); }
};
他のサンプルは QTestLib Tutorialを使用してください。
もしあなたが qmake を使用しているのであれば、以下の行をプロジェクトファイルに追加してください。
QT += testlib
もしあなたが他のビルドツールを使用しているのであれば、 QTestLib のヘッダファイルの位置がインクルードパスに含まれていることを確認してください。(通常は Qt のインストールディレクトリの下の include/QtTest に当たります)。もしあなたが Qt のリリースビルドを使用しているのであれば、あなたのテストを QtTest ライブラリにリンクしてください。デバッグビルドの場合は QtTest_debugを使用してください。
個々の説明は Writing a Unit Test を参照してください。
自動テストを実行するための記述方法は次の簡単な形式になります。
testname [options] [testfunctions[:testdata]]...
ここで、 testname はあなたの実行ファイル名に置き換えてください。 testfunctions は実行するテスト関数の名前(複数可)を指定できます。もし testfunctions が渡されなかった場合、全てのテストが実行されます。もし testdataの中のエントリー名を追加した場合、そのテストデータに対してのみテスト関数は実行されます。
例えば:
/myTestDirectory$ testQString toUpper
は toUpper という名前のテスト関数を全てのテストデータに対して実行します。
/myTestDirectory$ testQString toUpper toInt:zero
は toUpper テストを全てのテストデータに対して実行し、 toInt テストを zero という名前のテストデータに対して実行します(もし指定されたテストデータが存在しない場合、このテストは失敗します)。
/myTestDirectory$ testMyWidget -vs -eventdelay 500
は testMyWidget 関数を実行し、全てのシグナルの発生を出力し、全てのマウス・キーボードイベントのシミュレート後に 500 ミリ秒待ちます。
下記のコマンドラインオプションが指定可能です:
To create a benchmark, follow the instructions for crating a test and then add a QBENCHMARK macro to the test function that you want to benchmark.
class MyFirstBenchmark: public QObject
{
Q_OBJECT
private slots:
void myFirstBenchmark()
{
QString string1;
QString string2;
QBENCHMARK {
string1.localeAwareCompare(string2);
}
}
};
The code insde the QBENCHMARK macro will be measured, and possibly also repeated several times in order to get an accurate measurement. This depends on the selected measurement back-end. Several back-ends are available an can be selected on the command line:
| Name | Commmand-line Arguemnt | Availability |
|---|---|---|
| Walltime | (default) | All platforms |
| CPU tick counter | -tickcounter | Windows, Mac OS X, Linux, many UNIX-like systems. |
| Valgrind/Callgrind | -callgrind | Linux (if installed) |
| Event Counter | -eventcounter | All platforms |
In short, walltime is always available but requires many repetitions to get a useful result. Tick counters are usually available and can provide results with fewer repetitions, but can be susceptible to CPU frequency scaling issues. Valgrind provides exact results, but does not take I/O waits into account, and is only available on a limited number of platforms. Event counting is available on all platforms and it provides the number of events that were received by the event loop before they are sent to their corresponding targets (this might include non-Qt events).
See the chapter 5 in the QTestLib Tutorial for more benchmarking examples.
の使い方 はユーザーがリモートの Windows CE デバイスやエミュレーター上でアプリケーションを起動するのを手助けしてくれる便利なアプリケーションです。
ユニットテストのコンパイルが成功した後で実行する必要があります。
起動の前に、次のファイルをデバイスにコピーしてください:
自動テストを起動する文法は次のシンプルな形式です:
cetest [options] ...
の使い方 ではクロスコンパイルではない通常のユニットテストと同じオプションを指定します。詳細は Command Line Arguments を参照してください。
以下のコマンドも含まれます:
Note: debug がデフォルトのビルドオプションです。
QtRemote は QTestLibの後でビルドされる小さなライブラリです。ホストシステムからリモートデバイス上でプロセスを開始することができ、実行が終わるまで待ちます。
cetest はホストコンピューターとデバイス間のリモート接続の為に Microsoft ActiveSync を使用します。 このため cetest と QtRemote を正常にコンパイルするためにはヘッダーファイルとライブラリが必要です。
Qt の インストール の前に、 INCLUDE と LIB の環境変数を適切に設定することが必要です。
Windows Mobile 5 for Pocket PC をデフォルトでインストールした場合は以下のようになります:
set INCLUDE=C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Activesync\Inc;%INCLUDE%
set LIB=C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Activesync\Lib;%LIB%
Qt はこのパスを記憶するので、クロスコンパイルの際に再度設定する必要はありません。
The CPU tick counters used for benchmarking is licensed under the following license: (from src/testlib/3rdparty/cycle.h)
Copyright (c) 2003, 2006 Matteo Frigo
Copyright (c) 2003, 2006 Massachusetts Institute of Technology
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
| Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) | Trademarks | Qt 4.5.0 |