6

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

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

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

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

4

3 回答 3

4

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

对比二进制文件的优势在于 SVG 文件是相对可读的 XML 文件,所以如果两个文件不相等,你不仅知道有问题,而且可以很好地提示问题的确切位置。

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

于 2013-02-19T16:03:09.010 回答
2

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

于 2013-02-19T17:11:02.640 回答
2

您可以使用 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);
于 2013-02-19T16:05:16.807 回答