我通常会尝试对任何可以轻松定义正确行为的代码使用单元测试,这些代码给出了一些相当小的、定义良好的输入集。这对于捕获错误非常有效,我一直在我的个人通用函数库中这样做。
然而,我写的很多代码都是数据挖掘代码,基本上是在大型数据集中寻找重要的模式。在这种情况下,正确的行为通常没有很好的定义,并且依赖于人类不容易预测的许多不同的输入(即数学不能合理地手工完成,这就是我使用计算机首先解决问题)。这些输入可能非常复杂,以至于几乎不可能提出合理的测试用例。识别值得测试的边缘情况非常困难。有时算法甚至不是确定性的。
通常,我会尽我所能通过使用断言进行完整性检查并创建一个具有已知模式的小玩具测试用例,并非正式地查看答案是否至少“看起来合理”,而不一定是客观正确的。有没有更好的方法来测试这些案例?