与测试代码相比,单元测试的典型大小

时间:2010-04-13 23:19:02

标签: unit-testing tdd

我很好奇当人们进行TDD时,测试代码与生产代码的比率是合理的/典型值。看一个组件,我有530行测试代码,用于130行生产代码。另一个组件有360行测试代码,用于360行生产代码。因此,单元测试需要大约3倍到5倍的代码。这是针对Javascript代码的。我没有太多经过测试的C#代码,但我觉得在另一个项目中,我看的测试代码是生产代码的2倍到3倍。

在我看来,假设测试足够,该值越低,就会反映出更高质量的测试。纯粹的猜测,我只是想知道其他人看到的比例。

我知道代码行是一个松散的度量标准,但由于我为测试和生产编写相同的样式(相同的间距格式,相同的注释等),因此值是可比较的。

5 个答案:

答案 0 :(得分:4)

这实际上取决于事物的考虑因素,但根据我的经验(是的,我确实在某些项目上测量了这一点),我看到比例从2:1到5:1(这是测试代码的课程)。另请查看C2维基上的ProductionCodeVsUnitTestsRatioUnitTestToCodeRatio页。

答案 1 :(得分:3)

哇,这些数字都很大!我大约是1:1,有时对于具有较高圈复杂度的类,它可能会接近2:1而支持单元测试LOC,但这会引发类需要重构的警钟。

您提到您使用相同的样式进行单元测试。就将您的测试视为生产代码而言,这是很好的,但您真的需要大量的测试代码注释吗?您是否在命名测试方法,以便描述测试所声称的内容?例如,使用'GivenXWhenYThenZ'函数命名,那么如果没有大的注释部分,它应该非常清楚测试的作用。

你在重构你的测试吗?将任何重复的设置等移动到单独的方法中?

您是否保持您的单元测试简单,因此每次测试只能断言一件事?

你是否过度测试了getter / setter这样的东西?

答案 2 :(得分:0)

这些数字听起来很正常。 我编写的最长单元测试超过1500行,它只测试了大约300行代码。

答案 3 :(得分:0)

不同的语言和测试框架将大不相同。例如,BDD框架比TestUnit样式代码多“DRYer”。此外,在几个项目中,我最终只通过几行Java来提供非常大的数据集 - 这些数据集测试了数千行代码 - 所以我的比例将会变得非常棘手。

我只看了我最近的三个项目(中等大小的轨道),测试比率的代码是1:2.3,1:1.6和1:1.9 ...所以你的数字听起来像是相似的。 (我刚刚跑过rake stats - 我之前从未真正看过它们。)

无论如何,警告标志着你有太多的测试:

  • 如果你做了一次改变,多次测试会失败,还是只有一次?如果大量测试失败,你可能会反复测试相同的东西,并且可以消除大部分测试。
  • 代码看起来像是复制和粘贴的。重构公共代码。
  • 测试太慢
  • 从未失败的测试

答案 4 :(得分:0)

我个人使用断言比率。有些东西可能需要更多的模型和设置代码来测试。我觉得X线的测试代码到Y行的prod代码可能不是很有用。代码覆盖工具可能是查看它的最佳方式。我在最近的两个项目中发现,我的代码每10行生产代码有1个断言。有没有其他人得到类似的价值观?