1

アプリケーションが何かを正しくレンダリングしたかどうかをテストするにはどうすればよいでしょうか?

例 (2D の例):

Microsoft Word 2007 http://img32.imageshack.us/img32/6197/37841144.png

影が正しく配置されていること、または正しい色/輪郭がレンダリングされていることをどのように知ることができますか? または、ある方向に回転するときに 3D 効果が正しくレンダリングされる場合は? ワードアートのサイズが変更された場合、その「正確さ」をどのように測定するのでしょうか?

4

2 に答える 2

3

いくつかの方法があります:

  1. 何をどのようにレンダリングするかが実際に非常に正確に指定されている場合は、ピクセルを参照レンダリングと比較するだけです。
  2. SVGのようなものの場合、それはそれほど明確に指定されていません。ここでの通常のアプローチは、参照レンダリングを使用してそれらを手動で比較することです。両方を簡単にオーバーレイし、一方を他方から差し引いて、その方法で明白な違いを見つけることができます。ただし、これは自動プロセスではありません。
  3. 画面上の画像の代わりに、描画された画像を表すデータを直接見ることができます。描かれるのは(あなたの例では)ベクターグラフィックです。つまり、明確に定義されたプロパティ、形状、および色を持つ必要があるいくつかの形状があり、形状データを参照と簡単に比較できます。そのようなことは自動的に行うことができます。Googleは、ChromeのレンダリングをWebページの参照レンダリングと比較するために同様のアプローチを使用していると思います。ピクセルデータを比較するのではなく、ブラウザ何をどのようにレンダリングするかを高レベルのデータと比較します。
于 2009-11-16T13:02:17.190 に答える
2

イメージとレンダリングベースの 2 つの方法があります。

画像の方法: 画像を内部ピクセル バッファーにレンダリングする方法を見つける必要があります (そのため、テストを「ヘッドレス」で実行できます。つまり、実際の UI がポップアップすることはありません)。

次に、いくつかのピクセルを選択し、それらの色が正しいことを確認します。あなたの例では、テキストの周りにいくつかの白いピクセルを選択して、レンダリングが漏れないようにします。のようなヘルパー メソッドassertThatRectangleIs(area, color)は、ある程度の範囲をカバーするのに役立ちます。アイデアは、特定の領域 (H の左側の縦棒など) を選択し、うるさくしすぎないようにすることです。

レンダリング ベースの方法は、gfx ライブラリが機能するという前提で機能します。したがって、実際のレンダリング コードを次のようなものでモックします。

public class MockGC extends GC {
    List<Op> ops = new ArrayList<Op> ();
    void drawLine (int x1, int y1, int x2, int y2) {
        ops.add(new Line(x1, y1, x2, y2, copyGC (gc)));
    }
}

そのため、コマンドと関連するすべてのオプションを比較しやすいデータ構造に保存するだけです。あるいは:

public class MockGC extends GC {
    StringBuilder buffer = new StringBuilder ();

    void drawLine (int x1, int y1, int x2, int y2) {
        buffer.append("line "+x1+","+y1+" - "+x2+","+y2+", color="+foreground()+"\n");
    }
}

後で、正しいレンダリング コマンドが発行されたこと、および GC (色、フォント、レンダリング ヒント) が使用されたことを確認できます。

後者の方法は、はるかに高速で 100% 正確ですが、コーディングの手間がかかります。

于 2009-11-16T13:17:16.557 に答える