如何测试一些东西正确地呈现?
-
20-09-2019 - |
题
一个人如何试验,如果应用程序呈现的东西是否正确?
例如(2D例):
Microsoft Word2007年http://img32.imageshack.us/img32/6197/37841144.png
你怎么知道这阴影是正确放置或正确的颜色轮廓是呈现的?或者如果3D效果呈现的正常工作时人们会转动方向?其他的事情可能是,如果字技术是重型,如何衡量其'正确'?
解决方案
有几个方面:
- 如果它实际上是非常精确地规定应该是什么和在哪些方式,然后你可以只是比较像素的一个参考呈现。
- 在情况下的事情就是SVG它不是那么明确规定。通常的做法是使用参考的效果,并比较它们的手。你可以很容易地复盖两个,减去一个来自其他并发现明显的差异,方法。这不是一个自动的进程,虽然。
- 你可以看看在表示数据绘制的图像,而不是银幕上的图像。得到什么绘制的是(在您的例子)的一个向量图形。这意味着有很多的形状,它应该有明确界定的性质、形状和颜色,你可以简单地比较你的形状的数据的参考。这种事情可以是自动完成的。我觉得谷歌使用类似的方法来比较铬是参照效果的网页;他们不比较像素数据,它们比较高级的数据是什么,以及如何浏览器 会 呈现。
其他提示
有两种方式:图像和基于渲染一个
图片的方式:你必须找到一种方式来呈现图像的像素内部缓冲区(所以你可以运行测试“无头”,即没有实际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%精确,但更多的工作,以代码。
不隶属于 StackOverflow