在单元测试,方法或场景中测试什么?

时间:2009-04-20 09:34:11

标签: unit-testing code-coverage testcase

在单元测试,方法或场景中测试什么?

如果测试每种方法,则需要最小的测试用例设置。

如果测试调用其他方法的方法,那么测试用例所需的设置是巨大的。如果单个方法的单元测试已经存在,那么为什么要编写使用它们的方法呢?

但是它也有一些应该测试的功能。此外,代码覆盖工具会抱怨覆盖百分比。

请提供您的实际意见。

3 个答案:

答案 0 :(得分:3)

  

如果测试一个调用其他的方法   然后设置所需的方法   测试用例是巨大的。如果是单元测试   个别方法已经存在   那么为什么要写这个呢   使用它们的方法?

因为该方法可能使用错误的参数或错误的序列调用底层方法,或者使用返回值执行错误操作。

根据我的经验,与它们之间的相互作用以及这种“胶水代码”相比,自包含方法中出错的可能性通常很小。

“经典”单元测试,你完全测试每个类的行为是一个很好的概念,但实际上,这种情况并不是那么常见或有用。这取决于为模块化设计代码需要多少注意力,并且(隐含于此)可测试性,但它永远不可能实现一切。

答案 1 :(得分:2)

您对一个方法进行单元测试,每个可能的执行路径都有一个测试用例。

单元测试的典型结构是Arrange-Act-assert(三A):

  • 安排 - 为您要测试的案例创建环境(这可以在套件设置或TestCase中完成,或两者都有)
  • Act - 测试用例调用测试方法
  • 断言 - 验证测试中的方法是做了它应该做的事情

过度设置应该表明你应该看看你的设计,例如,你的课程可能太大,或做太多事情。 Excessive setup是一种反模式。

您可以使用mock objects来隔离您正在测试的课程。

答案 2 :(得分:2)

单元测试的一号规则是:

一次只测试一件事!

这意味着:您甚至不测试方法,在单一条件下测试方法的单个方面。所以你为同样的方法提出了几个测试。

隔离是良好单元测试的关键。您需要模拟您的依赖项(例如,使用RhinoMocks)。一开始它看起来更复杂,但从长远来看,它更容易管理和维护。在测试中只测试少量代码,让您尽可能地进行测试,并且您将进行可维护的测试。