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

13

我对单元测试还不熟悉,但想在MVC模式(使用PHP)中实现它。现在我不确定该如何入手。

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

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

是否有一些好的代码示例来说明如何完成这个过程。

3个回答

11
应该创建一个单独的文件夹进行测试。将测试代码混杂在生产代码中通常不是一个好主意,这会影响性能和调试。

尽量少依赖于其他模块来进行单元测试,如果类A依赖于B,则应该模拟B以确保如果B失败,它不会导致A也失败。当正确使用时,单元测试的主要优点是可以轻松地定位问题。如果A因其B依赖项而失败,则首先查看A,然后再查看B。同样,如果B依赖于C并且C失败,则必须查看A,B和C。这基本上破坏了单元测试最大的优点之一。如果所有测试都正确执行,则C中的错误不会导致任何其他地方的失败,因此您只需查找单个类即可解决问题。

为了使您的代码真正健壮,可以将单元测试与PHP断言结合使用:

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

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


2
“单元测试应该内置在框架中,还是我们只需创建一个名为tests的新文件夹?”
如果您使用第三方框架,它通常会包含一些单元测试工具,但您需要将自己的测试类放入一个单独的文件夹中,这样(例如)您可以为发布软件滚动不包括测试的版本。
“包括所有必要的类并对每个类进行单元测试?”
通常每个应用程序类都有一个测试类。 因此,如果您有一个模型类M,则会有一个名为M_Test(或其他采用的命名规则)的测试类。
如果您还不熟悉PHPUnit,您需要下载并阅读其文档。

1

单元测试应该是MVC框架的一部分。例如,可以查看CodeIgniter用户指南中的单元测试类章节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接