Unit testing 什么不应该进行单元测试?

Unit testing 什么不应该进行单元测试?,unit-testing,Unit Testing,我的印象是,有些问题很难进行单元测试。即使你这样做了,这些测试通常也没有什么价值 除了getter和setter之外,哪些代码不应该进行单元测试 (可能类似于)自动单元测试不能在图形代码上运行,因为计算机无法确定屏幕上显示的内容是否正确! 尽管您可以在这种情况下编写手动单元测试,但这当然是一个成本和收益的问题,您越接近100%,成本就越高 还有UI层,如果这是一种难以测试的技术,您可以对该层进行编程,使其尽可能薄,然后仅手动测试 根据您的情况,您可以通过层和生成的代码放弃测试 请注意,这不仅仅是

我的印象是,有些问题很难进行单元测试。即使你这样做了,这些测试通常也没有什么价值

除了getter和setter之外,哪些代码不应该进行单元测试


(可能类似于)

自动单元测试不能在图形代码上运行,因为计算机无法确定屏幕上显示的内容是否正确!
尽管您可以在这种情况下编写手动单元测试,但这当然是一个成本和收益的问题,您越接近100%,成本就越高

还有UI层,如果这是一种难以测试的技术,您可以对该层进行编程,使其尽可能薄,然后仅手动测试

根据您的情况,您可以通过层和生成的代码放弃测试

请注意,这不仅仅是一个代码覆盖率的问题,而是一个如何测试的问题,最好对有限的代码部分进行多次测试,并降低代码覆盖率。

我的一般方法是“如果这段代码不值得测试,为什么首先值得测试”?如果我使用的是一种迫使我拥有大量无用的重复样板的语言,那么如果语言的编译器可以检查这些部分,那么也许我不需要测试这些部分;但我通常使用我编写的代码实际上有意义的语言;-)

你能给出一个很难进行单元测试的问题的例子吗?我听说这是一个借口,用来避免测试错误恢复和诊断代码,这些代码只会在极少数和极不可能的情况下触发,但每次出现这种情况,我都会争辩说,恰恰相反,该代码是最需要单元测试的代码,因为它不会在集成测试和正常使用中使用(例如,在QA阶段)

依赖项注入允许您使用伪对象或模拟对象来表示(无论是什么“永远不会导致此错误,但我们无论如何都会对此进行覆盖”--网络、数据库、电源控制接口等),并且您的伪代码或模拟代码很容易就会导致各种伪错误,因此您可以彻底检查错误恢复和诊断代码

也许这取决于你写什么样的应用程序——在过去的几年里,我主要从事集群管理软件,在那里,任何可能出错的事情都会发生,很多不可能出错的事情都会发生,正常运行时间和快速恢复是至关重要的。在这个领域,没有人敢反对皮带和吊带的方法(如果他们这样做了,可靠性工程师会用棍棒追击他们;-)


但我最近转向了商业智能,我注意到这种方法也能很好地转换:如果我的代码生成的数字(可能会向商业决策者显示一个漂亮的图表等)值得生成,那么它们最好是准确的,这意味着(除其他外)生成它们的代码需要像监视网络或电源系统的代码一样进行彻底仔细的测试!-

您不应该为其他人的代码(例如您正在使用的框架)编写单元测试。您应该只为您的代码编写测试。模拟对其他人代码的依赖性,以便您只需要为自己的代码编写测试。

在我当前的项目中,我正在进行功能和系统功能的自动测试,但根本不进行单元测试:


有些人说,单元测试的唯一替代方法是特别的手动测试;但许多好处(例如回归测试)来自自动化的测试,而不是来自单元级的测试。

您不需要测试语言结构,但除此之外,没有什么“不应该”进行单元测试


如果在某些情况下,您已经获得了设计,并且有很好的理由证明它存在,并且它不是应用程序的关键任务部分,例如一个次要的用户界面特性,那么就可以提出一个不一定值得为其进行单元测试的情况。但这不一定与“不应该”相同进行单元测试。

arturh问什么不应该测试,而不是什么不能测试:)哦,测试图形代码是绝对可能的:)像AutomatedQA这样的工具有截图测试,可以在截图之间进行逐像素比较。但这绝对不值得。@Praveen-我认为检查图形代码是值得的。就在最近,我参与了一个项目,将复杂的图表呈现给.pngs,以便交付给客户。将生成的.png校验和与参考进行比较的能力比目测检查要可靠得多,并试图记住应该正确的内容。我的措辞有点误导,我指的是实时图形(即游戏),这很难测试@马丁-是的。我也有点被它难住了!您应该记住,单元测试不仅仅是在开发过程中发现bug。当您需要测试回归时,它们也非常有用。@Alex:如果样板代码是为您生成的呢?那么你就不必写了,但是如果你可以假设代码生成器做得正确的话,那么它可能不值得进行单元测试。虽然我觉得单元测试很有用,但开发人员的时间是一种稀缺商品,测试“一切”都非常耗时。我只想说框架应该达到接近100%(忽略样板)的代码覆盖率。样板可能是为您生成的(我认为是通过Eclipse生成的代码模板),但测试将确认a)它正确生成b)它没有更改。如果您可以更改样板代码的生成方式,那么就有出错的空间,谁能说有人不会更改非团队成员创建的代码呢。这是不是有点肛门?也许。但是我宁愿把精力放在这上面。@John和@Brian,我同意代码生成器可能需要一种不同的思维方式--