如何测试应用程序是否正确呈现了某些内容?
例如(2D示例):
Microsoft Word 2007 http://img32.imageshack.us/img32/6197/37841144.png
如何知道正确放置阴影或呈现正确的颜色/轮廓?或者,当一个人在一个方向上旋转时,3D效果是否正确呈现?其他的事情可能是艺术这个词被重新调整大小,如何衡量它的“正确性”?
答案 0 :(得分:3)
有几种方法:
答案 1 :(得分: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%精确,但编码工作要多得多。