如何将TDD用于图像渲染项目?

时间:2011-10-29 10:57:47

标签: tdd

我正在编写一个光线跟踪器,我想用自顶向下的TDD编码。 我不想给你带来细节,所以简而言之,程序将以一种方式工作,你给它一个指定的场景(例如球体的坐标及其半径),它将输出一个图像被回报的3d球形。 我可以在世界上如何首先测试这种行为?

我知道我可以先测试一些内部算法,这些算法位于.render()函数中,但我想自上而下,我无法提前预测生成的图像。我知道我可以测试所有黑色或指定尺寸,但是如果我想严格使用TDD,那些测试就不会让我任何地方:“你不应该实现超过其通过测试所需的程度”。< / p>

那么,有什么想法吗?

2 个答案:

答案 0 :(得分:3)

不要尝试自动测试图像。您的眼球在验证图像方面比您可能编写的任何代码都要好得多。作为回归测试,您可以捕获图像输出并进行像素比较,但这将是一个脆弱的回归测试,而不是TDD单元测试。

将渲染逻辑提取到单独的可测试类中。我认为除非你能找到一个现有的库(这可能值得寻找),否则你可以进行TDD的大量计算和算法。 TDD是关于设计的,现在它告诉你将渲染算法从显示中分离出来。

答案 1 :(得分:1)

显然,您无法预测给定用例的确切图像,或者您不需要该项目。即使是最狂热的TDD倡导者也不会要求您先编写完整的测试。但是,您可能首先编写load-image-and-compare-to-program-output部分并稍后插入实际图像,我实际上建议这样做。从使用提议的API开始总是一个好主意,因为它可能会暴露您在其为时已晚之前从未想过的问题。

您可能已经知道,而不是确切的图像,但您想要测试的图像的某些属性。例如,如果渲染强制反射金属球,您可能知道图像的某些区域有多亮(大约),或者某些部分必须是对称的等等。编写这些测试是个好主意。第一。 (我为自动生成的图表维护了一个测试套件,它们包含诸如“在这个图像中必须显示所有十种颜色”的测试,即同心圆应该被绘制得最大 - 首先。光线跟踪输出当然要复杂得多,但原则适用。)