【Squishノウハウ】カスタムテーブル・ウィジェットの検証方法

こちらの記事はHow to verify a custom table widget?の抄訳です。

Squish GUI Testerは、テスト対象となるアプリケーションを操作し、テストステップを進行させるツールです。ただ、それだけでは完全ではありません。何が起きたのか、そしてそれが正しい結果であるのかを確認することも大切です。そのために、Squishでは様々な手段を提供しています:単一のプロパティ、ウィジェットやウィンドウの見た目、そしてテーブル全体への検証ポイント(英語)などです。ただし、テーブル検証ポイントは、サポート対象のGUIコントロールに限って機能します。それでは、カスタムテーブルウィジェットに対して同じような検証を行いたいときは、どうすればいいのでしょうか?

テーブルの内容を確認するためには、一つの基本的な条件があります。それは、Squishが各テーブルセルにアクセスできることです。そのために、テーブルウィジェットには、行数や列数、そして各セルの内容を取得するためのゲッターが必要となります。期待するデータについては、SquishのTestData API(英語)を活用できます。これを使えば、様々なファイル形式から期待値を読み込むことができます。

例えば、QtのQTableWidgetがSquishのテーブルVPでうまく動かないとしましょう。この場合、検証したいテーブルと、期待データのファイル名を引数に取る関数を作成することが求められます:

def checkTableAgainstTestdata(table, testDataFileName):
dataset = testData.dataset(testDataFileName) columns = table.columnCount rows = table.rowCount
   tableName = objectMap.symbolicName(table)
  test.log(f"Verifying table {tableName}")
testDataColumns = len(testData.fieldNames(dataset[0])) if columns != testDataColumns: test.fail("Table does not match test data", f"Table has a different number of columns than the test data " f"in {testDataFileName}:\n{tableName}") return for row, record in enumerate(testData.dataset(testDataFileName)): if row >= rows: test.fail("Table does not match test data", f"Table has different number of rows than the test data " f"in {testDataFileName}:\n{tableName}") return for col in range(columns): expectedText = testData.field(record, col) actualText = table.item(row, col).text() test.compare(expectedText, actualText, f"({row}|{col})")

テストデータのファイルは、テストケースの "testdata" ディレクトリか、共有のtestdataディレクトリに存在するとしましょう。データがある場合、テーブルから行数と列数を取得します。その後、テーブルの各セルを順に見ていき、test.compare(...)を使って各セルの内容を確認します。この比較結果はSquishのテストレポートに記録されます。

関数の呼び出し例は以下のようになります:

def main():
# Do some testing here...

table = waitForObject("{type='QTableWidget' visible='1'}")
testDataFileName = "expectedvalues.tsv"
checkTableAgainstTestdata(table, testDataFileName)

お問い合わせ

SquishをはじめとするQtのQA(品質保証)ツールにご興味のおありの方は、Qt JapanのEメールアドレス:japan@qt.ioまでお気軽にご連絡ください。概要のご説明から詳細な技術的相談、またツールトライアルのご案内もいたしております。


Blog Topics:

Comments