如何对MVC类进行单元测试?

时间:2011-06-18 15:21:55

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

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

单元测试应该构建到框架中,还是只创建一个名为tests的新文件夹,并包含所有必需的类和单元测试?

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

是否有一些关于如何实现此目的的良好代码示例。

3 个答案:

答案 0 :(得分:9)

  

单元测试应该构建到框架中,还是只创建一个名为tests的新文件夹,并包含所有必需的类和单元测试?

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

  

因此,为了测试模型,我应该在单元测试中包含框架的某些部分吗?

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

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

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

C

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

  

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

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

  

包括所有必要的课程和单元测试?

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

如果您还不熟悉PHPUnit,那么您需要抓住它并阅读他们的文档。