我如何使用PHPUnit中的构造?

时间:2010-05-30 02:13:47

标签: php unit-testing phpunit

我是PHPUnit的新手,只是深入阅读手册我找不到一个如何从端到端构建完整测试的好例子,所以,我留下了问题。

其中一个是如何准备环境以正确测试我的代码?

我试图弄清楚如何正确传递测试设置/拆卸方法所需的各种配置值,以及类本身的配置。

// How can I set these variables on testing start?
protected $_db = null;
protected $_config = null;

// So that this function runs properly?
public function setUp(){
    $this->_acl = new acl(
        $this->_db,    // The database connection for the class passed 
                       // from whatever test construct

        $this->_config // Config values passed in from construct
    );
}

// Can I just drop in a construct like this, and have it work properly?
// And if so, how can I set the construct call properly?
public function __construct(
    Zend_Db_Adapter_Abstract $db, $config = array(),
    $baselinedatabase = NULL, $databaseteardown = NULL
){
    $this->_db = $db;
    $this->_config = $config;
    $this->_baselinedatabase = $baselinedatabase;
    $this->_databaseteardown = $databaseteardown;
}

// Or is the wrong idea to be pursuing?

1 个答案:

答案 0 :(得分:1)

由于您似乎正在使用Zend Framework,我可以告诉我们是如何做到的,但我不能保证它是正确的解决方案。但它有效:)

所有测试都在一个单独的测试文件夹中,该文件夹将Test Suite定义为XML(因此您可以使用phpunit --configuration TestSuite.xml命令运行它)。在根级别有TestHelper文件但是每个测试都在调用,并且通过调用应用程序的引导类来进行引导。在应用程序中bootstrap有一个方法,并进行大量的自举,但没有实际的请求调度。因此,在运行此类方法之后,您所拥有的将是一个随时可用的环境(您可以使用所有Zend_Db,日志,模块等组装并准备好)单元测试可以使用。 调用TestHelper发生在每个单元测试类的最开始。这是一个简单的例子:

/**
 * Unit test for GeoAddressTable model
 * (skipped)
 */

// Call GeoAddressTableTest::main() if this source file is executed directly.
if (!defined('PHPUnit_MAIN_METHOD')) {
        define('PHPUnit_MAIN_METHOD', 'GeoAddressTableTest::main');
}

require_once 'PHPUnit/Framework.php';

require_once dirname(dirname(__FILE__)).'/GeoTestHelper.php';

希望这有帮助