在命令行下,不管当前目录在哪儿,都可以简单地启动一个项目的PHPUnit测试。
具体一点,我们的项目名为proj,其下有个测试目录tests,测试Namespace为ProjTest。
通常我们要进入proj/tests/目录,然后运行类似下面的命令
cd /path/to/proj/tests/
phpunit --bootstrap bootstrap.php ProjTest
如果能做到象下面这样,不是更傻瓜化吗?
chmod +x /path/to/proj/tests/bootstrap.php #第一次运行时
/path/to/proj/tests/bootstrap.php
第一步,很容易想到,用xml配置bootstrap和Namespace,下面proj/tests/config.xml是个简化版本
<?xml version="1.0" encoding="UTF-8"?>
<phpunit stopOnFailure="false" bootstrap="bootstrap.php">
<testsuites>
<testsuite name="ProjTest">
<directory>ProjTest</directory>
</testsuite>
</testsuites>
<logging>
<log type="json" target="./runtime/logs.json"/>
</logging>
<php>
<var name="DB_DSN" value="mysql:host=127.0.0.1;charset=utf8" />
<var name="DB_USER" value="dba" />
<var name="DB_PASSWD" value="password" />
<var name="DB_DBNAME" value="db_test" />
<var name="DB_TBLPRE" value="t_" />
</php>
</phpunit>
第二步,改造bootstrap.php,这个需要打开phpunit文件,才知道要使用类PHPUnit_TextUI_Command
#!/usr/bin/env phpunit
<?php
//--------------------------
//这里是bootstrap代码
//--------------------------
if ($_SERVER['argc'] <= 2) { #/usr/local/bin/phpunit ./bootstrap.php
//运行测试,相当于命令行下 phpunit -c config.xml
$phpunit = new \PHPUnit_TextUI_Command();
$phpunit->run(array('-c', __DIR__ . '/config.xml'));
}