Unit testing 访问器的单元测试是必须的吗?
对于除其他方法外还具有多个setter和getter的类,考虑到在测试接口的其余部分时仍将调用它们,为访问器编写单元测试的时间是否合理 我只会对它们进行单元测试,如果它们做的不仅仅是设置或返回一个变量。在某种程度上,您需要相信编译器会为您生成正确的程序。我喜欢对它们进行单元测试。如果访问器除了简单地返回一个字段之外还执行任何类型的工作,那么该代码将被适当地测试 即使给定的访问器除了返回一个字段之外不做任何事情,它也可能在以后被修改以做一些额外的事情Unit testing 访问器的单元测试是必须的吗?,unit-testing,Unit Testing,对于除其他方法外还具有多个setter和getter的类,考虑到在测试接口的其余部分时仍将调用它们,为访问器编写单元测试的时间是否合理 我只会对它们进行单元测试,如果它们做的不仅仅是设置或返回一个变量。在某种程度上,您需要相信编译器会为您生成正确的程序。我喜欢对它们进行单元测试。如果访问器除了简单地返回一个字段之外还执行任何类型的工作,那么该代码将被适当地测试 即使给定的访问器除了返回一个字段之外不做任何事情,它也可能在以后被修改以做一些额外的事情 此外,这是一种增加正在运行的测试数量的简单方法
此外,这是一种增加正在运行的测试数量的简单方法,许多管理者都喜欢这种方法。如果您的IDE生成并管理对成员访问器的修改,您将不会做任何特殊的事情,那么测试它们就真的不重要了;类型将匹配,命名将由模板进行,等等。我的测试标准是测试包含条件逻辑(while、if、for等)的每一段代码。如果访问器是简单的getter/setter,我会说测试它们是在浪费时间。我认为节省时间并且不编写您认为不会特别有用的单元测试是合理的 虽然100%的测试覆盖率是一个令人钦佩的理想,但在某些情况下,您会遇到回报递减的问题,您花在编写测试上的时间不值得您从中获得好处
如果您发现单元测试非常有用,那么您可以稍后返回并添加更多单元测试。我认为大多数人会说测试它们是浪费时间。在99%的情况下,这是正确的。如果访问器中有一个bug,而其余的单元测试没有间接捕获它,那么我会开始质疑为什么会有这个属性 另一方面,测试访问器所需的输入比问以下问题所需的输入更少:)
我亲自测试它们。但对于我来说,这是一个灰色的区域,只要我在小组里有足够的覆盖范围,我就不强迫其他人测试他们。 通常,当我考虑编写单元测试时,我会问自己:
除此之外,正如Dan指出的,“在某个时候,你需要相信编译器会为你生成正确的程序。”我们公司有各种各样的人和观点。我倾向于不去测试它们,因为它们通常都是这样
- 自动生成
- 在另一个测试的上下文中测试(例如,有一些其他代码使用这些访问器
- 不包含任何可能中断的代码
- 当它们不是简单地生成“getter”和“setter”时
- 当它们是只为其他用户提供的重要API的一部分,并且没有在您当前所在的上下文中真正测试时
甚至敏捷的祖父Bob Martin也说不。绝对不行。单元测试的思想是确保更改不会以未知的方式影响行为。不为
getFoo()编写测试可能会节省一些时间
。如果将Foo
的类型更改为稍微复杂一点的类型,则很容易忘记测试访问器。如果您质疑是否应该编写测试,最好编写测试
IMHO,如果你正在考虑跳过为一个方法添加测试,你可能想问问自己这个方法是否必要。为了充分披露,我是那些只在证明必要时添加setter或getter的人之一。你会惊讶地发现,在con之后,你真的不需要访问特定的成员指令,或者当您只想访问某个真正依赖于成员的计算结果时。但我离题了
一个好的口头禅是总是添加测试。如果你不认为你需要一个,因为这个方法是微不足道的,请考虑移除这个方法。我意识到常用的建议是跳过“琐碎”的测试是可以的。方法,但你必须问问自己该方法是否必要。如果你跳过测试,你是说该方法将永远是微不足道的。请记住,单元测试还可以作为意图和提供的契约的文档。因此,对微不足道方法的测试表明该方法确实是微不足道的
您不必为不包含逻辑的属性编写测试测试简单属性的唯一解释是提高测试覆盖率-但这很愚蠢。同意-测试只有在测试内容可能出错的情况下才有用,但如果它们稍后被修改以保留更多逻辑会怎么样。单元测试的目的不是捕捉代码的错误更改吗?呵呵…谢谢。我通常不参与这些讨论,但无论如何当我看到“如果…很简单,那么…”这句话时,我感到有些畏缩。难道你不能添加单元测试来指定非平凡的行为吗