我为什么要进行单元测试和Web测试(而不仅仅是网络测试)?

Zer*_*nce 16 c# asp.net unit-testing visual-studio

我目前的立场是:如果我使用Web测试(在我的情况下通过VS.NET'08测试工具和WatiN,可能)使用代码覆盖率和广泛的数据彻底测试我的ASP.NET应用程序,我应该没有需要编写单独的单元测试,因为我的代码将通过所有层与UI一起进行测试.代码覆盖将确保我能够访问每个功能代码(或显示未使用的代码),并且我可以提供涵盖所有合理预期条件的数据.

但是,如果您有不同的意见,我想知道:

  1. 什么额外的好处呢单元测试确定了这证明了努力,包括在一个项目(记住,我做的web测试无论如何,所以在很多情况下,单元测试将被覆盖,网页测试已经覆盖代码).

  2. 你能用一些例子来详细解释你的理由吗?我经常看到诸如"这不是它的意义"或"它促进更高质量"的回应 - 这实际上并没有解决我必须面对的实际问题,也就是说,我怎么能证明 - 有实际结果 - 花更多钱时间测试?

Ori*_*rds 22

代码覆盖率将确保我的代码功能完好

"命中" 并不意味着"测试"

仅进行Web测试的问题在于它只能确保您点击代码,并且它在高级别上看起来是正确的.

只是因为你加载了页面,并没有崩溃,并不意味着它实际上正常工作.以下是我遇到的一些事情,其中​​'网络测试'涵盖了100%的代码,但完全错过了一些非常严重的错误,单元测试不会有.

  1. 页面从缓存中正确加载,但实际数据库已损坏
  2. 页面加载了数据库中的每个项目,但只显示了第一个 - 它看起来很好,即使它完全失败,因为它花了太长时间
  3. 该页面显示了一个看起来有效的数字,实际上是错误的,但它没有被拿起,因为1000000很容易被误认为100000
  4. 页面按重合显示有效数字 - 10x50与25x20相同,但其中一个是错误的
  5. 该页面应该向数据库添加一个日志条目,但这对用户不可见,因此没有看到.
  6. 绕过身份验证使网络测试真正起作用,因此我们错过了身份验证代码中的一个明显错误.

很容易想出更多这样的事情的例子.

你需要两个单元测试来确保你的代码实际上做了它应该在低级别做的事情,然后功能/集成(你称之为web)测试在那些之上,以证明它实际上工作时所有那些经过单元测试的小件都被链接在一起.


Jon*_*eet 9

单元测试在转向时可能比网络测试快得多.这不仅在开发时间方面是正确的(如果你可以直接测试一个方法,你可以直接测试一个方法,而不是你必须构建一个最终会触及它的特定查询,几层以后)在执行时间(按顺序执行数千个请求将比执行短方法花费数千次).

单元测试将测试小功能单元,因此当它们失败时,您应该能够很容易地找出问题所在.

此外,使用单元测试模拟依赖关系要比完全前端更容易 - 除非我错过了一些非常酷的东西.(几年前,我研究了模拟和网络测试如何整合,当时没有什么合适的.)


Bil*_*l K 5

单元测试通常不能证明任何给定的功能集合起作用 - 至少它不应该.它证明您的班级合同按预期运作.

验收测试更倾向于客户要求.每个要求都应该有验收测试,但验收测试和单元测试之间确实没有要求 - 它们甚至可能不在同一个框架中.

单元测试可用于推动代码开发,重新测试的速度是一个重要因素.在测试时,您经常会删除被测试的类所依赖的部件以进行单独测试.

验收测试系统就像您提供它一样 - 从GUI到数据库.有时它们需要数小时或数天(或数周)才能运行.

如果你开始认为它是两个完全不同的野兽,你将成为一个更有效的测试者.