答え
はい、GUIテストライブラリをテストする必要があります。
たとえば、ライブラリが2次元配列に対してグリッドの内容を検証するためのCheckメソッドを提供している場合、それが意図したとおりに機能することを確認する必要があります。
そうしないと、グリッドが特定のデータを受信する必要があるビジネスプロセスをテストする、より複雑なテストケースが信頼できない可能性があります。Checkメソッドのエラーによってフォールスネガティブが発生した場合は、問題をすぐに見つけることができます。ただし、誤検知が発生する場合は、今後大きな頭痛の種になります。
CheckGridメソッドをテストするには:
- グリッドに既知の値を入力します
- 値を入力してCheckGridメソッドを呼び出します
- このケースに合格すると、 CheckGridの少なくとも1つの側面が機能します。
- 2番目のケースでは、CheckGridメソッドがテストの失敗を報告することを期待しています。
- 期待値を示す方法の詳細は、xUnitフレームワークによって異なります(後の例を参照)。ただし、基本的に、テストの失敗がCheckGridによって報告されない場合は、テストケース自体が失敗する必要があります。
- 最後に、空のグリッド、グリッドサイズが配列サイズと一致しないなどの特別な条件について、さらにいくつかのテストケースが必要になる場合があります。
CheckGridがエラーを正しく検出することをテストするには、ほとんどのフレームワークで次のdunitの例を変更できるはずです。
begin
//Populate TheGrid
try
CheckGrid(<incorrect values>, TheGrid);
LFlagTestFailure := False;
except
on E: ETestFailure do
LFlagTestFailure := True;
end;
Check(LFlagTestFailure, 'CheckGrid method did not detect errors in grid content');
end;
繰り返しになりますが、GUIテストライブラリをテストする必要があります。秘訣は-どうやって効果的にそうするのですか?
TDDプロセスでは、実際に実装する前に、まず新しい機能をテストする方法を理解することをお勧めします。その理由は、そうしないと、それがどのように機能するかを確認する方法について頭を悩ませることがよくあるからです。テストケースを既存の実装に後付けすることは非常に困難です。
サイドノート
あなたが言ったことが少し気になります...あなたは「(あなたの時間の)70%が(あなたのテスト)を維持するのにかかる」と言いました
これは私には少し間違っているように聞こえます。理想的には、テストは単純であり、インターフェイスまたはルールが変更された場合にのみ変更する必要があるためです。
誤解されているかもしれませんが、「プロダクション」コードを書かないという印象を受けました。それ以外の場合は、問題を減らすために、テストコードと本番コードを切り替えるサイクルをより細かく制御する必要があります。
いくつかの提案:
- 非決定論的な値に注意してください。たとえば、日付と人工キーは、特定のテストで大混乱を引き起こす可能性があります。これをどのように解決するかについての明確な戦略が必要です。(それ自体で別の答え。)
- テストしているインターフェースの側面を安定させるために、「本番開発者」と緊密に連携する必要があります。つまり、「影響を与えない」変更でテストが勝手に中断されないように、テストがGUIコンポーネントを識別して相互作用する方法を認識している必要があります。
- 前のポイントでは、変更を加えるたびに自動テストを実行すると便利です。
- また、単純に任意の順列に要約されるテストが多すぎることに注意する必要があります。たとえば、各顧客がカテゴリA、B、C、またはDを持っている場合。次に、4つの「新規顧客」テスト(カテゴリごとに1つ)により、最初のテストよりも実際には多くのことを伝えず、維持するのが「難しい」3つの追加テストが提供されます。