【问题标题】:PHPUnit - test MVC controller with $_POST variablePHPUnit - 使用 $_POST 变量测试 MVC 控制器
【发布时间】:2010-12-28 11:27:47
【问题描述】:

我开始与 Kohana 一起使用 PHPUnit。我的应用程序有许多控制器,它们只是从某种形式获取数据,验证和插入/更新/删除到/-/来自数据库。我应该如何为此编写测试用例。

我知道,如果我想测试一个函数,我会编写数据提供程序函数并将返回值与预期值进行比较。但是我的输入数据(来自表单的数据)正在$_POST 变量中传递。我应该如何测试这个?在那之后,我应该检查插入的数据是否真的在数据库中?请给我一些此类测试的指导方针或一些示例/教程的链接。谢谢。

【问题讨论】:

    标签: php post controller kohana phpunit


    【解决方案1】:

    首先,如果您正在测试从接收 POST 数据到检查数据库中的值的所有过程,这不再是单元测试:您不是在测试一个组件与其他组件隔离,而是在测试将这些组件集成在一起。

    这让测试变得更加困难:

    • 您必须以更难的方式提供数据:不仅仅是作为方法的参数,而是作为整个应用程序的参数(例如,这里意味着伪造 POST 数据)
    • 您还有更多事情需要验证:不仅仅是方法的返回值,或者它是否引发了异常
    • 您有几个不同且可能不相关的事情可能导致失败(某些 PHP 代码中的问题、数据库中的问题、数据库服务器不可用......),这将导致失败更难找到原因。


    请注意,我并没有说那种“集成”测试没有用,顺便说一句;-)


    不过,伪造$_POST 数组非常简单:它不是只读的,你可以在其中存储任何你想要的东西。

    因此,在您的测试用例开始时,没有什么能阻止您在其中注入所需的任何数据。

    【讨论】:

      【解决方案2】:

      帕斯卡所说的。另外,请注意,有专门用于测试 http/浏览器级别交互的工具。您可以使用 SimpleTest 的 Web 测试用例(使用模拟/可编写脚本的浏览器)。如果您更喜欢 PhpUnit,我认为您可以在 PhpUnit 中相当轻松地使用 SimpleTest 的浏览器。否则会有更重量级的 Selenium IDE,PhpUnit 已经集成了它。

      【讨论】:

        【解决方案3】:

        我同意 Pascal 的观点,即 $_POST 数组不是只读数组,您可以根据需要对其进行操作。 这也取决于你的框架,Zendframework 提供了灵活的操作变量 如链接中的示例所示

        http://xebee.xebia.in/2010/02/05/test-driven-development-with-zend-framework-and-phpunit/comment-page-1/#comment-3431

        但是在这里你失去了使用 PHPUnit 内置函数的优势,比如(断言、数据提供者等) 但在大多数情况下,我们使用全局数组 $_POST、$_GET 或 $_REQUEST,当我们看到 PHPUnit 示例时,我们会在 Google 上搜索“如何在 PHPUnit 中设置 POST 变量” 由于 PHPUnit 没有演示 MVC 测试用例(虽然这有点用勺子喂) 我们需要获取我们框架的实例,然后我们可以玩我们的框架和 PHPUnit 你的测试方式也将与其他方式不同

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-24
          • 2021-07-21
          • 2015-12-11
          • 2016-01-31
          • 2017-08-16
          • 2012-07-16
          • 1970-01-01
          • 2014-12-03
          相关资源
          最近更新 更多