【问题标题】:Redirect database connection on PHPUnit test在 PHPUnit 测试中重定向数据库连接
【发布时间】:2014-05-29 19:17:39
【问题描述】:

我正在尝试使用 PHPUnit 测试我的 PHP Web,我需要测试数据库连接(如插入、更新和删除)。
我有两个数据库,一个用于产品,一个用于测试。现在我在每次测试前后手动替换数据库 URL。

当代码在测试模式下运行时,有什么方法可以自动替换 URL?

【问题讨论】:

    标签: php phpunit integration-testing


    【解决方案1】:

    可以在phpunit.xml中设置环境变量:

    <php>
      <env name="env" value="test" />
    </php>
    

    然后就可以根据这个环境变量的值来设置数据库的名字了:

    $name = getenv('env') == 'test' ? 'test' : 'production';
    

    【讨论】:

      【解决方案2】:

      phpunit.xml 中,将bootstrap 设置为bootstrap.php

      <phpunit
       bootstrap="bootstrap.php"
      >
      

      然后,在bootstrap.php

      $GLOBALS['db'] = new c_database(
       'testhost', // Host
       'testuser', // Username
       'testpass', // Password
       'testdb' // Database
      );
      

      您现在可以通过您的应用使用$db 访问数据库连接。在您的应用中,您可以执行以下操作:

      if(!isset($db)){
       $db = new c_database(
        'livehost', // Host
        'liveuser', // Username
        'livepass', // Password
        'livedb' // Database
       );
      }
      

      运行测试时,请务必指定phpunit.xml 的位置。您可以使用 Makefile 轻松完成此操作(假设 phpunit 位于 /path/to/app/vendor/bin/phpunitphpunit.xml 位于 /path/to/app/tests/phpunit.xml):

      CWD:=$(PWD)
      
      test:
          vendor/bin/phpunit --configuration $(CWD)/tests/phpunit.xml
      
      .PHONY test
      

      现在,每次您运行测试(例如,make test)时,都会使用正确的凭据。

      【讨论】:

        【解决方案3】:

        使用sed

        它几乎是一个在您指定的文件中搜索的 preg 替换。这就是你在盒子上使用它的方式

        sed -i 's/proddatabase.expensivebusiness.com/devdatabase.expemsivebusiness.com/g' *.php

        我有一个 shell 脚本,它遍历所有 prod 文件并放置开发标签(浮动通知、更改数据库地址并在必要时用测试用户名/密码替换用户名/密码)。制作一个脚本,将其放入您的 bin 中,然后在终端中键入“dev”或“prod”以在 dev 和 prod 值之间切换......除非您希望在 php 中同时拥有 dev 和 prod 代码,那么您只需要重新评估您的方法并暂时使用简单的 vim preg-replace 。

        【讨论】:

          猜你喜欢
          • 2011-05-08
          • 2019-01-07
          • 2021-11-15
          • 1970-01-01
          • 2012-03-20
          • 2018-10-31
          • 1970-01-01
          • 2022-12-11
          • 1970-01-01
          相关资源
          最近更新 更多