【问题标题】:Questions on about TDD or unit testing in ASP.NET MVC关于 ASP.NET MVC 中的 TDD 或单元测试的问题
【发布时间】:2010-04-06 22:57:02
【问题描述】:

我一直在寻找如何进行单元测试并发现它很容易,但是,我想知道的是,在 asp.net mvc 应用程序中,什么应该是真正重要的测试以及你应该使用哪些方法伙计们用吗? 我只是找不到关于在编写单元测试时真正测试什么的明确答案。 我只是不想进行不必要的测试并浪费开发时间进行过度测试。

【问题讨论】:

    标签: asp.net-mvc unit-testing tdd


    【解决方案1】:

    您应该尽可能地对您的应用程序进行单元测试。

    对于您编写的每一行代码,您都需要验证它是否有效。如果您不对其进行单元测试,则需要以其他方式对其进行测试。甚至启动网站并四处点击都是一种测试。

    当您将单元测试与其他类型的测试(包括运行网站和手动使用它)进行比较时,单元测试往往会提供最佳的投资回报,因为它们相对易于编写和维护,并且可以快速反馈您是否刚刚引入了回归错误。

    我并不是说编写单元测试没有开销 - 有,但是任何类型的测试都有开销,而且根本不测试会有很大的开销(因为回归错误很容易漏掉)。

    用其他类型的测试来补充单元测试仍然是一种很好的做法,但是好的单元测试套件可以提供出色的回归测试套件。

    【讨论】:

    • +1 "如果代码值得编写,就值得进行测试。" (Testivus之道)
    【解决方案2】:

    Ron Jeffries 说“Test everything that could possibly break”。

    其他人 - 我想是 Kent Beck,但我找不到参考资料 - 说:“只测试你想工作的代码。

    这两个都是不错的策略。

    【讨论】:

      【解决方案3】:

      我实际上认为不需要在 MVC 中测试任何东西。我认为除了视图和控制器之外,您所有的业务逻辑、规则等都需要测试?

      我能看到测试控制器的唯一真正原因是集成测试。如果你所有的业务逻辑都是正确的,那么这应该是一个简单的测试,总是返回 true。

      控制器实际上应该只从视图中获取数据并将数据传递给它,所以......

      对于视图,除了打开视图看看它做了什么之外,还可以进行哪些测试?

      当我编写我的项目时,控制器中几乎没有代码,我将所有繁琐的工作都放在了我已经进行了广泛测试的业务引擎中。

      【讨论】:

      • 你不想单元测试“如果用户没有登录,他们不应该去安全控制器吗?”还是向导中的“如果用户没有填写必填字段,他们就不会进入下一个屏幕”?听说过 Selenium 在浏览器中测试视图吗?
      • 实际上,如果您要使用安全控制器,那么它应该在某处调用业务层对象,并且我认为应该进行一些基本的登录测试。然后可以进行测试。如果您想测试以查看控制器是否在未登录的情况下执行,那么是的,请务必编写测试。就我个人而言,我不希望依赖控制器来处理这种级别的安全性。
      • BLL 中的某些内容仍然必须说“不,这是不允许的”,然后 MVC 仍然必须重定向到另一个屏幕。即使你的控制器很简单 if( bll.IsAuth() ) { //do redirect } 你不想确保重定向发生吗? “宁愿不依赖控制器来处理该级别的安全性”您依赖 HTTP 管道的某些部分来确保安全性,而这通常通过控制器公开。
      • 你在那里提出了一些有价值的观点。我认为我来自哪里,当我开始一个项目时,安全模型通常是我做的第一件事,它主要是从现有项目中复制粘贴。所以我有点知道安全工作,[授权]会做它应该做的。快速查看视图即可确认。所以我想在安全控制器上至少进行一次测试可能不是那么糟糕的主意
      • +1 MVC 层应该几乎没有任何值得测试的东西。模型中的核心逻辑应该经过很好的测试。我同意 jfar 的观点,您可能想要测试安全关键代码,但是在 MVC 层中完成的任何安全性都应该只是对 BLL 的“双重检查”。
      【解决方案4】:

      单元测试有利于测试服务/模型。但是,当您需要测试应用程序功能时,更好的选择是功能测试(即 Selenium)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-25
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 2021-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多