我的应用程序根目录中有一个名为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
我做错了什么?此外,我感谢任何人在这里给出一些关于最佳实践的建议。也许这种在每个页面中要求配置文件的方法有点旧。感谢
答案 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;