Every now and then your unit tests depend on external services
- be it a database or LDAP server or a company's web service.
Access to those services and servers require creditentials, be it
username and password combinations or API keys.
Such confidential information may often not be distributed, and
your unit tests should not have them coded into.
Instead a separate config file template,
config.php.dist, should be shipped.
To run the tests, the user creates a copy of that configuration
template, saves it as config.php and adjusts it.
Example 24-4. Exemplary directory layout tests/
config.php.dist
config.php |
|
Example 24-5. Exemplary configuration template
<?php
$GLOBALS['My_Package_UnittestConfig'] = array(
'host' => 'FIXME',
'username' => 'FIXME',
'password' => 'FIXME',
'host' => 'FIXME',
);
?>
|
|
You should not die() if no config file is found but
let the unit test continue gracefully - this is important in combined
suites, when several packages are unit tested in a row.
Instead, you should check if it exists first:
Example 24-6. Checking if the configuration file exists
<?php
//...
class My_Package_ClassTest extends PHPUnit_Framework_TestCase
{
protected $configExists = null;
//...
public function __construct($name = null)
{
parent::__construct($name);
$configFile = dirname(__FILE__) . '/config.php';
$this->configExists = file_exists($configFile);
if ($this->configExists) {
include_once $configFile;
}
}
//...
public function setUp()
{
if (!$this->configExists) {
$this->markTestSkipped('Unit test configuration is missing.');
}
//...
}
//...
}
?>
|
|