c# - 为什么我应该同时进行单元测试和 Web 测试(而不仅仅是 Web 测试)?

标签 c# asp.net visual-studio unit-testing

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

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

  1. 单元测试的额外好处是证明将其包含在项目中的努力是合理的(请记住,无论如何我都在进行网络测试,所以在很多情况下,单元测试将覆盖网络测试已经覆盖的代码)。

  2. 你能用具体的例子详细解释你的理由吗?我经常看到诸如“这不是它的本意”或“它促进更高质量”之类的回答——这实际上并没有解决我必须面对的实际问题,即我如何证明——有切实的结果——花更多的钱时间测试?

最佳答案

Code coverage will ensure I'm hitting every functional piece of code

“命中”意味着“测试”

仅进行网络测试的问题在于,它只能确保您命中代码,并且它看起来在高层次上是正确的。

仅仅因为您加载了页面并且它没有崩溃,并不意味着它实际上可以正常工作。以下是我遇到的一些情况,其中“Web 测试”覆盖了 100% 的代码,但却完全遗漏了单元测试不会出现的一些非常严重的错误。

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

很容易想出数百个这样的例子。

您需要两个单元测试来确保您的代码确实在低级别执行它应该执行的操作,然后在这些测试之上进行功能/集成(您称为网络)测试,以证明它当所有这些小的单元测试件链接在一起时,实际上是有效的。

关于c# - 为什么我应该同时进行单元测试和 Web 测试(而不仅仅是 Web 测试)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/176267/

相关文章:

c# - 如何从 jenkins 构建 visual studio 安装程序项目 (.vdproj) 以生成 .exe 和 .msi 文件?

c# - 在哪里放置我的自定义 Html Helpers?

c# - MEF 还是提供商模型?

c# - 如何使用 C# 调用没有名称的 Javascript

javascript - 在服务器端更新字段后防止触发 OnChange 函数

javascript - 您将如何在仪表板上订购磁贴?

ASP.NET session Cookie - 指定基域

c# - Linq To Sql - 在限制返回的行数时防止子查询

ios - 基础设施 WebDatePicker : calendar dropdown broken in iOS

.net - OK-取消对话框 : handling the 'Enter' key press