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

Nem*_*emo 10 php model-view-controller unit-testing

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

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

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

是否有一些关于如何实现这一目标的良好代码示例.

net*_*der 9

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

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

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

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

单元测试(正确完成时)的主要优点是它可以让您轻松查明问题.如果A失败,因为它的B依赖,你会先看看A,然后 B.同样,如果B依赖于CC失败,你将不得不考虑A,B随后 C.这几乎破坏了单元测试的最大优势之一.如果所有测试都正确完成,则失败C不会导致其他任何地方失败C,因此您将有一个类来查找以解决问题.

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

$return = $this->addOne($some_param);
assert('$return == $some_param + 1');
Run Code Online (Sandbox Code Playgroud)

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