如何阻止PHPUnit添加包含/必需的文件作为测试套件的一部分?

时间:2011-02-12 23:37:15

标签: netbeans phpunit testcase

我尝试按照PHPUnit手册介绍如何使用自定义测试执行顺序设置测试套件。我现在意识到我只需要这些线路和一些包括让套件工作:

public static function suite()
{
    $suite = new PHPUnit_Framework_TestSuite('Package');
    return $suite;
}

但是当我使用上面的行时,测试执行顺序是由我的包含的排序顺序定义的。当我尝试通过suite()更改它时,如下所示,测试执行两次,首先按照suite()定义的排序顺序执行,然后按照包含的排序顺序执行:

public static function suite()
{
    $suite = new PHPUnit_Framework_TestSuite('Package');
    $suite->addTestSuite('Package_Class1Test');
    $suite->addTestSuite('Package_Class2Test');
    $suite->addTestSuite('Package_Class3Test');
    return $suite;
}

包括完成:

require_once 'Package/Class3Test.php';
require_once 'Package/Class2Test.php';
require_once 'Package/Class1Test.php';

结果(测试执行顺序):

1) Class1Test
2) Class2Test
3) Class3Test
4) Class3Test
5) Class2Test
6) Class1Test

我正在使用Netbeans 7.0beta在Windows 7上运行PHP 5.3.5 / PHPUnit 3.5.11。 我阅读了phpunit手册(http://www.phpunit.de/manual/3.5/en/organizing-tests.html),但我不知道我做错了什么......

请帮忙。

PS:这个问题可以通过自动加载类来解决。

2 个答案:

答案 0 :(得分:1)

PHPUnit 3.5五年前发布,四年没有得到支持。但即使五年前,使用$modifierSupprimerProjet = new ModifierSupprimerProjet(); $form = $this->createForm('app_modifier_supprimer_projet', $modifierSupprimerProjet); 个对象组成一个测试套件也不再是一个好习惯。

请阅读PHPUnit网站上的Getting Started文章以及PHPUnit手册中的organizing tests章节,了解如何正确组织测试套件。

答案 1 :(得分:0)

您是否使用正确的参数调用phpunit

我有这个设置,适用于套件。

/tests/
/tests/allTests.php
/tests/lib/
/tests/lib/libAllTests.php
/tests/lib/baseTest.php
/tests/lib/coreTest.php
/tests/lib/...

<强> allTests.php:

require_once 'lib/libAllTests.php';
class AllTests
{
    public static function suite()
    {
        $suite = new PHPUnit_Framework_TestSuite('Project'); 
        $suite->addTestSuite('LibAllTests');     
        return $suite;
    }
}

<强> libAllTests.php:

require_once 'baseTest.php';
require_once 'coreTest.php';    
class LibAllTests
{
    public static function suite()
    {
        $suite = new PHPUnit_Framework_TestSuite('Lib'); 
        $suite->addTestSuite('CoreTest');
        $suite->addTestSuite('BaseTest'); 
        return $suite;
    }
}

从命令提示符我可以调用:

  • phpunit /tests/allTests.php:运行所有测试
  • phpunit /tests/lib/libAllTests.php:运行所有lib测试
  • phpunit /tests/lib/baseTest.php:运行所有基础测试
  • phpunit /tests/*:运行所有测试

在所有四种情况下,核心测试都在基础测试之前运行,并且没有测试重复两次。

我正在使用phpUnit 3.5.7。

相关问题