如何测试应用程序是否正确呈现了某些内容?
例如(2D 示例):
微软 Word 2007 http://img32.imageshack.us/img32/6197/37841144.png
如何知道阴影放置正确或渲染了正确的颜色/轮廓?或者,当一个方向旋转时,3D 效果是否正确渲染?其他事情可能是,如果重新调整了艺术这个词的大小,如何衡量它的“正确性”?
如何测试应用程序是否正确呈现了某些内容?
例如(2D 示例):
微软 Word 2007 http://img32.imageshack.us/img32/6197/37841144.png
如何知道阴影放置正确或渲染了正确的颜色/轮廓?或者,当一个方向旋转时,3D 效果是否正确渲染?其他事情可能是,如果重新调整了艺术这个词的大小,如何衡量它的“正确性”?
有几种方法:
有两种方法:基于图像和基于渲染的一种。
图像方式:您必须找到一种将图像渲染到内部像素缓冲区的方法(这样您就可以“无头”运行测试,即不会弹出实际的 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% 精确,但编码工作量更大。