【问题标题】:How to unit test MVC classes?如何对 MVC 类进行单元测试?
【发布时间】:2011-09-17 19:49:45
【问题描述】:

我一般是单元测试的新手,但想在 MVC 模式中实现它(使用 PHP)。现在我不确定如何解决这个问题。

是否应该将单元测试内置到框架中,或者我们只是创建一个名为 tests 的新文件夹并包含所有必要的类并对每个类进行单元测试?

简而言之,如果有模型M,它与框架本身也有一些耦合。那么为了测试模型,我应该在单元测试中包含框架的某些部分吗?

是否有一些很好的代码示例说明如何实现这一点。

【问题讨论】:

    标签: php unit-testing model-view-controller


    【解决方案1】:

    单元测试应该是 MVC 框架的一部分。例如,查看 CodeIgniter 用户指南的 Unit Testing Class 章节。

    【讨论】:

      【解决方案2】:

      是否应该将单元测试内置到框架中,或者我们只是创建一个名为 tests 的新文件夹并包含所有必要的类并对每个类进行单元测试?

      您绝对应该为它创建一个单独的文件夹。出于性能和调试的原因,将生产代码与测试混在一起通常不是一个好主意。

      所以要测试模型,我应该在单元测试中包含框架的某些部分吗?

      越少越好。单元测试应该几乎不需要依赖项。如果类A 依赖于B,你应该模拟B 以确保如果B 失败,它不会使A 也失败。

      单元测试的主要优点(如果正确完成)是它可以让您轻松查明问题。如果A 由于其B 依赖关系而失败,您将首先查看A然后 B。同样,如果B 依赖于C 并且C 失败,您将不得不查看AB然后 C。这几乎破坏了单元测试的最大优势之一。如果所有测试都正确完成,C 中的失败不会导致 C 以外的任何其他地方失败,因此您将需要查找一个类来解决问题。

      要真正使您的代码防错,您可以将单元测试与PHP assertions 结合使用:

      $return = $this->addOne($some_param);
      assert('$return == $some_param + 1');
      

      顺便说一句,单元测试 MVC 与一般的单元测试没有区别。

      【讨论】:

        【解决方案3】:

        是否应该将单元测试内置到 框架,或者我们只是创建一个新的 名为测试的文件夹

        如果您使用的是第三方框架,它通常会包含一些单元测试助手,但您需要将自己的测试类放入单独的文件夹中,以便(例如)发布您的不包含它们的分发软件。

        包括所有必要的类并对每个类进行单元测试?

        每个应用程序类通常有一个测试类。所以,如果你有一个模型类 M,你就会有一个测试类 M_Test(或者你采用的任何命名约定。)

        如果你还不熟悉PHPUnit,你会想要抓住它并阅读他们的文档。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-11
          • 2011-07-27
          • 1970-01-01
          • 1970-01-01
          • 2011-12-19
          • 2014-10-08
          • 2011-03-24
          • 2012-02-29
          相关资源
          最近更新 更多