問題タブ [qtestlib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
534 参照

c++ - 複数の型を単一の QTest::addColumn 呼び出しに渡す方法

データをファイルにシリアル化するためのテンプレート関数と、fist 関数によって返される ID を使用してデータを取得するためのテンプレート関数があります。

QTestここで、フレームワークを使用して、関連する不完全なタイプの数でこれらの単体テストを作成したいと思いますprivate slots

私の質問は、基本的に の代用となるべきものです???

それを綴る

完全を期すための明白な解決策。私は特に、すべてを入力する必要のない解決策を見つけようとしています。

Qバリアント

1 つの回避策は、を使用することQVariantです。それに関する問題はたくさんあります。QVector<qint64>まず、Qt タイプを使用する場合でも、メタ システムへの登録、ストリーミング オペレータの登録、および比較オペレータの登録などの必要があるため、かなり面倒です...さらに、QVariantそれ自体のシリアル化をミックスに追加し、QVariant明らかにカスタム タイプをシリアル化しますタイプ自体よりもさらに書き込まれたデータが含まれます。確かに、ドキュメントがそうあるべきだと言っているだけではありません-メタシステムと、カスタムタイプをシリアライズするときに呼び出されるQVariantその特別なストリーミングメソッドに関係している可能性があると思います.QVariant

void* と dynamic_cast?

私が考えた別のオプションは、typeidの結果type_infoを一緒に使用することでしたvoid*。は* に???置き換えられ、テスト メソッドが適切な型に変換して参照解除できるように、を含む別の列が提供されます。しかし、残念ながらそれは不可能のようです。void_dataconst type_info*

他のオプションはありますか?

0 投票する
2 に答える
972 参照

qt - QTest::mouseClick を QAction で使用する方法

私は Qt に非常に慣れていないので、QTest名前空間とを使用してクリックをシミュレートする必要がありますQTest::mouseClickQMenu私の問題は、 として定義されたエントリをクリックしたいのですQActionが、mouseClick関数ではこれを引数として渡すことができません (QWidgetsまたはのみQWindows)。

ここで何ができますか?

0 投票する
1 に答える
410 参照

qt - QtTest ライブラリを使用して QAction にアクセスするには?

QTableWidget(resultTable)にポップアップ メニューがあります。クラスのコンストラクターで、コンテキスト メニュー ポリシーを設定します。

popUpMenuResultTable機能:

ここで、 QtTest ライブラリを使用して GUI をテストする関数を実装する必要があります。

resultTableを右クリックして、ユーザーと同じ結果を得るにはどうすればよいですか? actionExport基本的に、 ( )にアクセスしてQActionトリガーする必要があります。

例えば:

ここに画像の説明を入力

私はすでに試しました:

しかし、それは表示されませんQMenu

Qt 5.3.2 を使用しています。

0 投票する
1 に答える
264 参照

c++ - QTest - Qt ベースのライブラリのテストを書き、クラスを公開する

MyLib次の構造を持つライブラリ(と呼びましょう)があります。

  • mylib_global.h -ライブラリを使用するアプリケーションを作成するときに、ライブラリの特定のシンボルを公開するために使用されるプレフィックスの後ろにQ_DECL_IMPORTorがあるかどうかを決定します。Q_DECL_EXPORTMYLIBSHARED_EXPORT

    /li>
  • MyLib.h - 他のさまざまなクラスも含むメイン クラスが含まれています。

    /li>
  • ソース ファイルとその他のクラス (ヘッダー + ソース) - の基になるロジックの宣言と定義が含まれていMyLibます。

ご覧のとおり、クラスが混在しています。ライブラリのメイン クラス (他のすべてのクラス インスタンスを制御する) と同じヘッダー ファイルで定義されているクラスもあれば、別のヘッダー ファイルで定義されているクラスもあります。MYLIBSHARED_EXPORTライブラリに対してリンクするときにライブラリの機能にアクセスできるようにするために公開する必要があるクラスはごくわずかです。

これは、通常のアプリケーションを作成する場合にはまったく問題ありません。ただし、コードを頻繁に変更するため (Qt テスト フレームワークを使用して) いくつかのテストを作成することにしました (今のところ:))。そこには多くの複雑な依存関係があり、すべてのテストを変更するたびに、書かれていることはカバーされており、機能は意図したものと同じままです。

テストを作成するときは、すべてのクラスにアクセスして、すべての歯車が正しい方向に回転していることを確認する必要があります (たとえ外部に公開されていなくても)。どうすればこれに対処できますか? すべてのクラスの前に追加できMYLIBSHARED_EXPORTますが、これにより、通常のユーザーが間接的に使用することのみを目的としたものを見ることもできます。これは、プロジェクトの設定で設定できる別のものを使用してより正確に調整できます#define。プレフィックスを持たないすべてのクラスが定義されている場合にのみ、プレフィックスが取得されます。それ以外の場合は公開されません。この解決策はトリックを行う可能性が非常に高いですが、可能であれば避けたいコードの混乱を引き起こします。

0 投票する
0 に答える
572 参照

c++ - 単体テストとテスト コンストラクターの継承

私は使用していますが、この問題は、私の意見では、単に特定QTestというよりも一般的です。QTest単純なクラスがあるとします:

そして、から派生する別のクラスNumber:

QTestクラスのテスト (を使用) は次のNumberようになります。

そして、それによりTenfromのテストを導出して、が不注意に のインターフェイスの契約を破らないNumberTestようにすることができます (たとえば、呼び出された仮想メソッドが によってオーバーライドされた場合、または後でそのように変更された場合に重要になる可能性があります)。TenNumberNumberTen

注:正しいデストラクタを自動キャプチャせず、ここに仮想デストラクタがないshared_ptrため、使用します。unique_ptr

継承されたテストは、基本クラスのテストとそれ自体のテストの両方を実行しますが、基本クラスのテストの 2 番目のアサート ( QVERIFY) で失敗しTenます。 (Number特定の値を持つ)が必要です。この問題は、継承されたクラスのコンストラクターをテストするとき (テストを継承するとき) にのみ発生し、最適な解決方法がわかりません。

私は確かに、親のテストからどのテストが実行され、どのテストがテストをコピーしないか、さらに悪いことに (コンストラクターのテストを省略して) チェリー ピックしたくありません。

一方、私が考えることができる唯一の解決策は、継承されるテストクラスからコンストラクターのテストを省略し(それから派生するすべてのテストに共通する必要があります)、ベース用に別のテストクラスを作成することですコンストラクターをテストするクラスのみ。結局、コンストラクターは実際にはインターフェイスの一部ではありません。この問題を (エレガントに) 解決する他の方法はありますか? それとも、そもそも完全に間違っていますか?