イメージとレンダリングベースの 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% 正確ですが、コーディングの手間がかかります。