phpunit testuite独立性
我正在phpunit中运行一系列测试,它们存在于单独的测试中,其列表由phpunit配置文件控制.当测试单独运行(即,不是通过配置文件,因此一次由于测试),它们通过,但是当一起运行时,我会失败.
仔细检查问题是,这些测试程序中的每一个都在框架中加载(通过require_once),该框架根据require_once时的设置执行一些内部配置.看来,在运行phpunit配置文件中单独列出的测试项之间,各种事情都会持续存在.在这种特殊情况下,框架已被视为已加载. 那么 – 有没有办法让phpunit独立地执行一系列的测试,也就是等同于一次在测试中运行phpunit? (phpunit在自动测试机器上由cruisecontrol触发,在提交之前由开发人员在本地触发.)我尝试过如“–process-isolation”和“–no-globals-backup”这样的选项,没有成功. 说明问题的一个简单例子将是一个’constant.php’文件: <?php if (defined('XYZZY')) define('TEST',1); else define('TEST',2); TestOne.php的testuite <?php define('XYZZY',""); require_once('constant.php'); class TestOne extends PHPUnit_Framework_TestCase { public function testOne() { $this->assertEquals(TEST,1); } } 一个类似的测试“TestTwo.php”: <?php require_once('constant.php'); class TestTwo extends PHPUnit_Framework_TestCase { public function testTwo() { $this->assertEquals(TEST,2); } } 和phpunit配置文件: <phpunit> <testsuites> <testsuite name="First"> <file>./TestOne.php</file> </testsuite> <testsuite name="Second"> <file>./TestTwo.php</file> </testsuite> </testsuites> </phpunit>
我试图为您提供一些工作过程隔离的工作示例,而不是备份全局.
希望你能够让你的测试与那些工作.如果不是只给我一个评论,我会看到回到你. 我已经用3.4.15测试了大部分内容,所有这些都与HEAD(3.5.x预计也会工作) 最简单的做法是: <?php class Test extends PHPUnit_Framework_TestCase { public function testOne() { define('FOO','BAR'); $this->assertEquals('BAR',FOO); } public function testTwo() { define('FOO','BAZ'); $this->assertEquals('BAZ',FOO); } } 并产生:
因此,如果您将测试组合在测试套件中,或者您可以为每个测试用例运行安装程序(取决于它是多么昂贵),那么可以使用简单的方法: <?php class Test extends PHPUnit_Framework_TestCase { public function setUp() { // your bootstrap for testsuite X // Maybe put this in a baseclass for that suite ? } public function testOne() { $this->assertEquals('BAR',FOO); } 简而言之 确保您在输入测试(和过程隔离)之后运行您的设置代码 如果一切都失败,你/我们无法解决这个问题: 使用 希望这可以帮助一个人.如果没有:让我知道 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |