問題タブ [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.
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
_data
const type_info*
他のオプションはありますか?
qt - QTest::mouseClick を QAction で使用する方法
私は Qt に非常に慣れていないので、QTest
名前空間とを使用してクリックをシミュレートする必要がありますQTest::mouseClick
。QMenu
私の問題は、 として定義されたエントリをクリックしたいのですQAction
が、mouseClick
関数ではこれを引数として渡すことができません (QWidgets
またはのみQWindows
)。
ここで何ができますか?
qt - QtTest ライブラリを使用して QAction にアクセスするには?
QTableWidget
(resultTable)にポップアップ メニューがあります。クラスのコンストラクターで、コンテキスト メニュー ポリシーを設定します。
popUpMenuResultTable
機能:
ここで、 QtTest ライブラリを使用して GUI をテストする関数を実装する必要があります。
resultTableを右クリックして、ユーザーと同じ結果を得るにはどうすればよいですか? actionExport
基本的に、 ( )にアクセスしてQAction
トリガーする必要があります。
例えば:
私はすでに試しました:
しかし、それは表示されませんQMenu
。
Qt 5.3.2 を使用しています。
c++ - QTest - Qt ベースのライブラリのテストを書き、クラスを公開する
MyLib
次の構造を持つライブラリ(と呼びましょう)があります。
mylib_global.h -ライブラリを使用するアプリケーションを作成するときに、ライブラリの特定のシンボルを公開するために使用されるプレフィックスの後ろに
/li>Q_DECL_IMPORT
orがあるかどうかを決定します。Q_DECL_EXPORT
MYLIBSHARED_EXPORT
MyLib.h - 他のさまざまなクラスも含むメイン クラスが含まれています。
/li>ソース ファイルとその他のクラス (ヘッダー + ソース) - の基になるロジックの宣言と定義が含まれてい
MyLib
ます。
ご覧のとおり、クラスが混在しています。ライブラリのメイン クラス (他のすべてのクラス インスタンスを制御する) と同じヘッダー ファイルで定義されているクラスもあれば、別のヘッダー ファイルで定義されているクラスもあります。MYLIBSHARED_EXPORT
ライブラリに対してリンクするときにライブラリの機能にアクセスできるようにするために公開する必要があるクラスはごくわずかです。
これは、通常のアプリケーションを作成する場合にはまったく問題ありません。ただし、コードを頻繁に変更するため (Qt テスト フレームワークを使用して) いくつかのテストを作成することにしました (今のところ:))。そこには多くの複雑な依存関係があり、すべてのテストを変更するたびに、書かれていることはカバーされており、機能は意図したものと同じままです。
テストを作成するときは、すべてのクラスにアクセスして、すべての歯車が正しい方向に回転していることを確認する必要があります (たとえ外部に公開されていなくても)。どうすればこれに対処できますか? すべてのクラスの前に追加できMYLIBSHARED_EXPORT
ますが、これにより、通常のユーザーが間接的に使用することのみを目的としたものを見ることもできます。これは、プロジェクトの設定で設定できる別のものを使用してより正確に調整できます#define
。プレフィックスを持たないすべてのクラスが定義されている場合にのみ、プレフィックスが取得されます。それ以外の場合は公開されません。この解決策はトリックを行う可能性が非常に高いですが、可能であれば避けたいコードの混乱を引き起こします。
c++ - 単体テストとテスト コンストラクターの継承
私は使用していますが、この問題は、私の意見では、単に特定QTest
というよりも一般的です。QTest
単純なクラスがあるとします:
そして、から派生する別のクラスNumber
:
QTest
クラスのテスト (を使用) は次のNumber
ようになります。
そして、それによりTen
fromのテストを導出して、が不注意に のインターフェイスの契約を破らないNumberTest
ようにすることができます (たとえば、呼び出された仮想メソッドが によってオーバーライドされた場合、または後でそのように変更された場合に重要になる可能性があります)。Ten
Number
Number
Ten
注:正しいデストラクタを自動キャプチャせず、ここに仮想デストラクタがないshared_ptr
ため、使用します。unique_ptr
継承されたテストは、基本クラスのテストとそれ自体のテストの両方を実行しますが、基本クラスのテストの 2 番目のアサート ( QVERIFY
) で失敗しTen
ます。 (Number
特定の値を持つ)が必要です。この問題は、継承されたクラスのコンストラクターをテストするとき (テストを継承するとき) にのみ発生し、最適な解決方法がわかりません。
私は確かに、親のテストからどのテストが実行され、どのテストがテストをコピーしないか、さらに悪いことに (コンストラクターのテストを省略して) チェリー ピックしたくありません。
一方、私が考えることができる唯一の解決策は、継承されるテストクラスからコンストラクターのテストを省略し(それから派生するすべてのテストに共通する必要があります)、ベース用に別のテストクラスを作成することですコンストラクターをテストするクラスのみ。結局、コンストラクターは実際にはインターフェイスの一部ではありません。この問題を (エレガントに) 解決する他の方法はありますか? それとも、そもそも完全に間違っていますか?