Java の Graphics2D を使用して、グラフのグラフィカル表現を生成しています。また、ImageIO を使用して PNG ファイルを書き込んでいます。( ImageIO.write(image, "png", out);
)
生成されたグラフィックスが期待どおりかどうかをテストするために、JUnit テストをどのように記述すればよいか疑問に思っています。PNG ファイルを事前に生成することはできますが、別のマシンでフォントが少し異なる場合はどうなりますか?
Java の Graphics2D を使用して、グラフのグラフィカル表現を生成しています。また、ImageIO を使用して PNG ファイルを書き込んでいます。( ImageIO.write(image, "png", out);
)
生成されたグラフィックスが期待どおりかどうかをテストするために、JUnit テストをどのように記述すればよいか疑問に思っています。PNG ファイルを事前に生成することはできますが、別のマシンでフォントが少し異なる場合はどうなりますか?
私にとって、この具体的な実装はうまくいくようです:
private void compareRasterImages(BufferedImage expectedPngIo, BufferedImage actualPngIo) throws AssertionError {
int minX = expectedPngIo.getMinX();
int minY = expectedPngIo.getMinY();
int maxX = expectedPngIo.getMinX() + expectedPngIo.getWidth();
int maxY = expectedPngIo.getMinY()+ expectedPngIo.getHeight();
assertEquals(minX, actualPngIo.getMinX());
assertEquals(minY, actualPngIo.getMinY());
assertEquals(expectedPngIo.getHeight(), actualPngIo.getHeight());
assertEquals(expectedPngIo.getWidth(), actualPngIo.getWidth());
for (int x_i = minX; x_i < maxX; x_i++){
for (int y_i = minY; y_i < maxY; y_i++) {
assertEquals(expectedPngIo.getRGB(x_i, y_i), actualPngIo.getRGB(x_i, y_i));
}
}
}
ImageIO を使用して、PNG から (byte[] として) BufferedImage を取得します。
BufferedImage expectedPngIo = ImageIO.read(new ByteArrayInputStream(expectedPng));
enter code here
出力の特定の既知の機能をテストしてみることができます。
または、結果のあいまいさを許容するいくつかの「集計プロパティ」のテストを作成することもできます。
完全な画像について本当に具体的な場合は、生成された画像のすべての RGB 値を配列に読み取り、その 2D 配列を事前に生成された画像を表すものと比較することができます。
フォントを無視したい場合は、画像が生成される環境に応じて、可変データを含まない画像の領域に対して同じことを行うことができます。アプリケーションが保証されているほどの高精度の画像を生成することが期待されていない限り、単体テスト用の修正および正規化ルーチンを組み込むことは時間の無駄です。