我正在图像处理(主要是OCR)方面工作,我想知道如何在开发中集成单元测试。
我已经在使用单元测试来处理更多“常见”类型的代码,但是在处理图像处理代码时,我不确定该如何处理。这种代码总是需要一些图像数据输入/输出,而对其进行模拟并不明显。目前,我主要进行集成测试,但是它们需要一段时间才能运行,我想了解一些有关如何将这种代码分解为单元测试的想法,以便我可以更快地运行它们。
编辑:分析角色可以经历许多步骤,包括多次旋转,缩放和形态操作。随着算法的发展,这些步骤经常改变。因此,在测试期间,输入和预期输出会发生很大变化。每个字符可以为100x100像素,因此毫无疑问地在代码中对它们进行编码或处理生成的数据。
您能否在无法创建单元测试的情况下草拟一个函数示例?
—
布朗
对于真正的答案来说太短了,而不是真正的单元测试:我们正在手工处理数据(例如:处理大量样本-对于此类分类任务,我通常超过1000,但是这取决于您的总体样本量),并自动将最终结果与手工处理的数据进行比较。我已经成立了一个小的框架要做到这一点,它会在几个星期内去开源,但是这是描述-你可以克隆过程:birgitplays.wordpress.com/2012/09/15/...
—
吉特P.
对于您的示例,您可以轻松地将旋转,缩放等作为小型测试单位进行测试。将给定图像旋转45度应该不会有太大变化。这也适用于缩放和形态运算。但是,要在实现过程中测试预期输出会发生变化的东西很困难。您可以尝试进行质量度量,并说质量> = some_quality。确保您的质量不会下降,但这可能也很难。除此之外,您所能做的就是进行测试,证明您的基础部件没有损坏。像缩放/旋转/等。
—
martiert 2012年
@martiert:我不是在测试旋转,缩放等功能,因为我从第3个库中调用它们,我认为它已经过了很好的测试。OCR算法由许多此类操作组成。但是正如您所说,很难测试输出会发生变化的东西。也许这是一个很好的警告,我们别无选择,只能依靠集成测试...
—
rold2007
@Birgit P .:有趣的解决方案。如您所说,它仍然是集成测试。拥有像您这样的框架将有助于更快地设置这些测试,但它们将无法更快地运行...
—
rold2007