2010-11-24 7 views
0

qtウィジェットをテストするのにcxxunitまたは他のユニットテストフレームワーク(QtTestLibを除く)を使用できますか?ctxtestフレームワークとvalgrindを使用してqtオブジェクトをテストする

はい、その後、さらに2つの質問がある場合:

  1. どのように?
  2. 私はvalgrindを使用して単体テストを実行しているので、これはいくつかのエラーを報告できますか?

答えて

2

はい、可能です。私は特にcxxunitについてはわかりませんが、理論的には可能です。

  1. Qtオブジェクトを適切にテストするには、グローバルセットアップとティアダウン機能でQApplicationオブジェクトを作成/破棄する必要があります。特にQApplicationの機能をテストしている場合を除き、テストアプリケーションの実行全体に対して作成する必要があります。これにより、ウィジェットのロジックの一部をテストできますが、ウィジェットの外観やUIの対話性は簡単にテストできません。また、特定の項目をテストすることは、アプリケーションのイベントループを実行することに依存している可能性があります。
  2. Valgrindが多少のエラーを報告する可能性があります。また、Qtのコードでエラーを報告する場合があります。特に、アプリケーションを解体して再利用する静的な割り当てが報告されることがあります。
+0

1)しかし、どのように(例えば)マウスクリックをエミュレートするのですか? 2)qtを使用したときの実際のメモリ問題は、(少なくとも私にとっては)あまり明確ではありません。私はqtが親を持つウィジェットの破壊を管理していることを知っています。 –

+0

@VJo:あなたのアプリケーションまたは単体テスト実行ファイルで実行します。親を持つウィジェットの破壊はvalgrindから見えるはずであり、したがってメモリリークとして現れません。しかし、Qtアプリケーションでvalgrindを実行した最後の時間には、Qtで作成された静的な割り当てがあったため、クリーンアップされませんでした。 –

+0

デストラクタはvalgrindに表示されますが、さらに詳細を提供できます。単体テストのウィジェットの親は何でしょうか? QApplicationオブジェクトですか? QApplicationのどのリークが偽ですか? –

1

UIをテストする場合は、SquishなどのUIテストツールを使用することをおすすめします。ユニットテスト私は、ウィジェット自体ではなく、ウィジェットの背後にあるロジックをテストするのに適しています。本当にあなたのQtウィジェットを単体テストしたいのであれば、QtTestLibよりも優れたソリューションはないと思います。

Valgrind:valgrind plugin for Squishがあります。私は自分自身でそれを使用していない。もちろん、他の単体テストもvalgrindで簡単に実行できますが、これを完全に自動化するソリューションはわかりません。 1つは、コードを所有している外部からのすべての警告を実際に抑制するようにしなければならない。 x11 libsは単体テストの失敗を引き起こさない。

+1

私たちはすでにスキッシュを使用していますが、スキッシュはユニットテスト用ではありません。私はそれらの中で本当に重いロジックを持つウィジェットを見てきました。 –

関連する問題