TDD:测试MVC应用程序

时间:2011-09-16 21:08:43

标签: php unit-testing mocking phpunit fixtures

我从头开始使用TDD和PHPUnit创建一个新应用程序。它将是一个MVC应用程序。我从模型开始我的测试。这很有趣,我没有太多问题。

现在我要创建我的视图/模型。但问题是:我如何测试我的控制器?观点怎么样?我的控制器将使用我测试的模型和我未来的视图。

感谢。

2 个答案:

答案 0 :(得分:6)

MVC中每个层有三大类测试。该单元测试模型,控制器的功能测试和视图的UI测试。

单元测试是最容易编写的。它们在时间上很便宜,并且不需要太多依赖项来进行存根/模拟。

另一方面,与单元测试相比,功能测试有点贵。在给定的场景中,如果您在应用程序中已经使用单元测试覆盖了足够多的模型,那么您可以在功能测试部分放松一下。但是,您应该仍然拥有良好的代码覆盖率 - 100%也适合您的控制器方法。

最后一个是UI测试,这是所有测试中最昂贵的。您可以使用Selenium进行基于浏览器的测试,并尝试使用您的语言进行自动化。您可能必须在后台运行RC服务器才能实现此目的。但请相信我,如果你涵盖前两个部分 - 单位和功能,如果不是没有,这可以是可选的。

建议使用代码覆盖实用程序进行CI - Continious Integration设置,该代码覆盖实用程序提供了通过测试覆盖的代码百分比的趋势。

答案 1 :(得分:2)

当您运行测试时,您应该只使用被测试的类。其他物体应该用模子或其他假结构代替。

执行此操作,因为(例如)在为控制器操作编写测试时,您将为所述操作提供一些值,然后检查是否将正确的数据传递给视图和模型。

这是您应该避免在代码中使用全局状态(以静态调用或全局变量的形式)的原因之一。

您可能会发现一些有用的链接