2011-06-18 46 views
8

我是一般的单元测试新手,但希望在MVC模式下实现它(使用PHP)。现在我不知道如何解决这个问题。如何对MVC类进行单元测试?

单元测试是否应该嵌入到框架中,或者我们只是创建一个名为tests的新文件夹并包含所有必需的类和单元测试?

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

是否有一些很好的代码示例说明如何完成此操作。

回答

7

是否应单元测试被内置到框架,或者我们只是创建一个新的文件夹,名为测试,并包括所有必要的类和单元测试每一个?

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

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

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

单元测试(正确完成)的主要优点是它可以让您轻松找出问题所在。如果A由于其B依赖项而失败,则首先请看A,,然后B。同样,如果B取决于CC发生故障,您必须查看AB,然后C。这几乎毁了单元测试的最大优点之一。如果所有测试都正确完成,C中的故障将不会导致其他任何地方发生故障,而不是在C中,因此您将有一个类来查找以解决问题。

要真正使你的代码错误验证,您可以结合使用单元测试PHP assertions

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

顺便说一句,有单元测试MVC之间没有差别,如不是单元测试一般。

1

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

1

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

如果您使用的是第三方框架,它通常会包括一些单元测试帮手,但是你会想把你自己的测试类放到一个单独的文件夹中,这样(例如)你可以推出一个你的软件发行版,但不包含它们。

包括所有必要的类和单元测试每一个?

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

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

相关问题