单元测试图形



是否有生成图形的单元测试代码的标准最佳实践?我专门研究Java和jUnit,但我认为这个概念也适用于其他语言。

到目前为止,我能想到的最好的方法是使用Mockito来模拟Graphics对象,并断言预先计算的东西,例如(伪代码):

assert that graphics.drawString was called with ("abc", 50, 100)
assert that graphics.setBackgroundColor was called with Color.RED

虽然这一切都很好,但我想知道这是否是正确的方法,或者是否有更成熟的实践来测试图形代码。

我不知道这是否是既定的做法,但我会考虑Batik项目中的SVGGraphics2D来模拟图形,并比较生成的SVG文件。

与比较二进制文件相比,SVG文件是可读性相对较高的XML文件,因此,如果这两个文件不相等,您不仅知道存在问题,而且还可以很好地了解问题的确切位置。

与您的解决方案相比,优势在于可以查看这些SVG文件(例如在浏览器中),因此测试的场景是自记录的。

您可以使用类似Mockito的东西来模拟您的图形对象。然后可以验证是否调用了drawString和setBackgroundColor方法。从这里举几个例子

类似于:

import static org.mockito.Mockito.*;

Graphics graphics= mock(Graphics.class);
//Run you code .... 
//verification that the methods were called 
verify(mockedList).drawString ("abc", 50, 100);

正如您所提到的,您可以测试您的计算和调用图形api。这很容易。但是,检查您是否正确使用了图形api(并生成了正确的图片)可能非常困难。我知道一些公司会对生成的图形(例如网页)进行屏幕截图,并使用许多复杂的指标将其与预期结果进行比较。但通常这不是降低成本的方法,而是一些经理的年度目标(比如说"流程自动化")。所以在走这条路之前要三思而后行-通常这不值得付出痛苦

最新更新