![]() |
Home · All Namespaces · All Classes · Main Classes · Grouped Classes · Modules · Functions |
Nokia が提供する QTestLib フレームワークは Qt のアプリケーションやライブラリの為のユニットテストツールです。 QTestLib は一般的なユニットテストフレームワークに見られる全ての機能に加え、GUIのテストのための機能も拡張されています。
Table of contents:
QTestLib は Qt ベースのアプリケーションとライブラリのためのユニットテストを簡単に記述できるようにデザインされています。
| 特徴 | 詳細 |
|---|---|
| 軽量 | QTestLib は約 6000 行のコードと 60 の公開されたシンボルから成ります。 |
| Self-contained | QTestLib は非GUIのテストのためにはたった数個の Qt Core ライブラリのシンボルしか必要としません。 |
| テストの速さ | QTestLib は特別な test-runner や特別な登録作業を必要としません。 |
| データ駆動テスト | テストは様々なテストデータに対して複数回実行することができます。 |
| 基本的な GUI テスト | 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 ミリ秒待ちます。
下記のコマンドラインオプションが指定可能です:
cetest はユーザーがリモートの Windows CE デバイスやエミュレーター上でアプリケーションを起動するのを手助けしてくれる便利なアプリケーションです。
ユニットテストのコンパイルが成功した後で実行する必要があります。
起動の前に、次のファイルをデバイスにコピーしてください:
自動テストを起動する文法は次のシンプルな形式です:
cetest [options] ...
cetest ではクロスコンパイルではない通常のユニットテストと同じオプションを指定します。詳細は 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 はこのパスを記憶するので、クロスコンパイルの際に再度設定する必要はありません。
| Copyright © 2008 Nokia | Trademarks | Qt 4.4.3 |