web-dev-qa-db-ja.com

グラフィックアプリケーションのTDD

TDD for UIに関する記事をいくつかググって読んだ。テスト駆動開発を使用してグラフィックアプリケーションの実装を開始する方法や、グラフィックアプリケーションの単体テストケースを作成する方法については、あまり明確ではありません。

アプリケーションの主な機能は、ユーザー入力に基づいてUIをレンダリングすることです。

  • キャンバスを描く
  • 線、円、楕円、正方形、その他の形状のレンダリング。

形状のレンダリングをテストする方法が難しいと感じています-

  • 特定の描画メソッドが呼び出されるかどうかをテストするかどうか。
  • 特定の形状の終点が正しく計算されているかどうかを確認します
6
Bhalchandra K

それはあなたのコードが何をしているか、つまりあなたがテストする必要がある実際のロジックが何であるかに依存します。

私は、アプリケーションが円や線などのオブジェクトを描画するためにAPIを使用していると想定しています。この場合の目標は、画像/画面が期待どおりに対応しているかどうかをテストすることではありません。指定された位置で円を描くと、それはそのAPIに属し、それに応じて画像/画面を反映します。代わりに、テストする必要があるのは、呼び出し元がyourコードの特定のメソッドを呼び出したときに、コードがこれを描画するメソッドを呼び出したことです。

偽物やモックを使用してこれを行います。言い換えると、特定のクラスをテストする場合、画像/画面にオブジェクトを描画する実際のAPIを注入するのではなく、テスト用に特別に作成した、実際の描画を行わない代替APIを注入します。代わりに、たとえば、特定のパラメーターを使用して特定のメソッドを呼び出したことを記録するだけです。後で、テストはこの代替を要求してメソッドが呼び出されたかどうかを通知し、それに応じて成功または失敗します。

5

人々が「テスト駆動開発」という用語を使うとき、それは彼らがユニットテストコードについて話しているとしばしば仮定されます。しかし、開発を推進するために使用できる他のタイプのテストがあります。

テストのイメージ比較を行いたい場合、それは確かに可能です。 deltaE 色差のような測定値があり、コードが生成する画像が実行ごとに変化したかどうかを判断するために使用できます。

たとえば、従来はすべてのビルドの前に実行される単体テストとしてこれらを実行したくないでしょう。ただし、ソースリポジトリへのコミットごと、または継続的インテグレーションシステムの一部として1晩に1回実行する場合があります。

私が作業している場所では、このようなテストをうまく使用して、レンダリングの回帰、レンダリングのエラー、またはその他の知りたいと思われる視覚的な変更や違いを通知しています。コードが特定のEdgeケースを処理するかどうかを確認するための単体テストを書くほど単純ではありませんが、コードの変更がレンダリングにどのように影響するかを理解するのに非常に役立ちます。

5
user1118321