有两种方式:图像和基于渲染的一种。
图像方式:您必须找到一种将图像渲染到内部像素缓冲区的方法(这样您就可以“无头”运行测试,即不会弹出实际的 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% 精确,但编码工作量更大。