如何在C#中对算法进行单元测试?

时间:2013-08-29 01:12:45

标签: c# algorithm unit-testing

我遇到了一种我不确定如何测试的情况:算法。具体来说,我正在尝试编写Adler32方法并为其创建单元测试,但此时我碰到了一堵砖墙。

我的第一次尝试最终成为我的方法中相同代码的缩短版本,这似乎是非常错误的。我的下一次尝试是有一个输入值表和预期结果,然后将预期结果与实际结果进行比较......这似乎是一个好主意,直​​到我意识到我知道如何填充此表的唯一方法是运行算法。所以我几乎陷入困境。如何在不进行单元测试(直接或间接)重用算法的情况下对单元测试算法进行单元测试?

2 个答案:

答案 0 :(得分:6)

如您所述,使用输入表和已知输出表。您需要从您知道准确的来源获取同一算法的另一个实现的输出。

如果您正在实施一个没有现成输入/输出数据的算法,那么以另一种方式重新实现该算法,例如在Excel中,并生成您知道准确的数据。我们经常使用报告的统计计算,我们可以在Excel中轻松生成数据。

答案 1 :(得分:0)

如果我们要讨论单元测试,因为您想为一个方法/类提供测试,您必须提供输入并验证算法的结果。

由于您的算法进行了一些默认情况下无法信任的计算(这是测试点),您需要根据常量值验证结果。例如。您提供5,方法返回17。哪个好或不好 - 你的测试通过或失败。

从何处获取17?使用纸和笔,在线计算网站,无论您信任的方式。

测试,尤其是单元测试,必须简单且非常轻便。您不应该提供一些替代方法来计算结果并根据生产代码对结果进行验证。这种方法为您带来两种不同的实现方式,您必须维护,重构等。

显然,您可以提供输入表和预期输出表,而不仅仅是517