PHPUnit:如何要求我的应用程序配置文件

时间:2014-07-28 06:11:39

标签: php phpunit autoload

我的应用程序根目录中有一个名为application.config.php的文件。我想要它或者为我的测试自动加载它。配置文件是这样的:

<?php
// database connection
$config = array(
  'database' => array(
    'dsn' => 'mysql:host=localhost;dbname=budgetz',
    'user' => 'budgetz_user',
    'password' => 't1nth3p4rk',
  ),
);

我的应用使用这些连接到数据库。因此,要测试我的模型,他们还需要连接到数据库,..或某些数据库。这只是在测试文件中要求它的问题:

<?php
require_once 'vendor/autoload.php';
require_once 'application.config.php';

class MapperTest extends PHPUnit_Framework_TestCase {
    public function testFetchOne() {
        $dbAdapter = new DatabaseAdapter($config['database']);
        $userMapper = new UserMapper($dbAdapter); // using UserMapper but any child of Mapper will do

        $user = $userMapper->fetchOne(1);

        $this->assertsEquals(1, $user->id, 'message');
    }
}

我尝试了这个,但是我收到了错误:

There was 1 error:

1) MapperTest::testFetchOne
Undefined variable: config

/var/www/new_orm/test/MapperTest.php:8

我做错了什么?此外,我感谢任何人在这里给出一些关于最佳实践的建议。也许这种在每个页面中要求配置文件的方法有点旧。感谢

2 个答案:

答案 0 :(得分:1)

Globals是一种选择,但不是很好。 创建你的类,女巫扩展PHPUnit_Framework_TestCase。然后使用setup设置您的配置。 e.g。

class myTestCase  extends PHPUnit_Framework_TestCase {
        private $config;
        public function setUp() {
            $this->config = ....
        }
        public function getConfig() {
           return $this->configl
        }

然后你的测试用例应该扩展myTestCase。您可以使用

访问配置
$this->getConfig();

无论如何,访问dev db不是一个好主意,也许最好mock work with the db

答案 1 :(得分:0)

尝试

public function testFetchOne() {
    global $config;