PHPUnit Eclipse配置:未找到测试

时间:2013-03-03 18:02:10

标签: php eclipse phpunit xdebug

在尝试使用PHPUnit作为单元测试库设置Eclipse时,我已经陷入了尝试运行简单测试用例的困境。作为参考,我按照this教程使用PHPUnit / Xdebug / Makegood设置Eclipse,唯一偏离给出的指导原则是为PHPUnit / Makegood设置以下配置文件:

config.xml:
    <phpunit backupGlobals="true"
         backupStaticAttributes="false"
         cacheTokens="false"
         colors="false"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         forceCoversAnnotation="false"
         mapTestClassNameToCoveredClassName="false"
         printerClass="PHPUnit_TextUI_ResultPrinter"
         processIsolation="false"
         stopOnError="false"
         stopOnFailure="false"
         stopOnIncomplete="false"
         stopOnSkipped="false"
         testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
         strict="false"
         verbose="false">
    <testsuites>
        <testsuite name="My Test Suite">
            <directory suffix=".php">/path/to/application/tests/</directory>
        </testsuite>
     </testsuites>
</phpunit>

现在,问题的根源在于我似乎无法使用Makegood从Eclipse运行PHPUnit测试。我编写的唯一测试(位于名为“test.php”的“/ path / to / application / tests /”文件夹中)如下所示(直接取自PHPUnit Manual):

<?php
class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        $this->assertEquals(0, count($stack));

        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertEquals(1, count($stack));

        $this->assertEquals('foo', array_pop($stack));
        $this->assertEquals(0, count($stack));
    }
}
?>

为了运行测试,我右键单击“tests”文件夹并点击Eclipse中的“Run All Tests”,打印到控制台:

  

Sebastian Bergmann的PHPUnit 3.7.15。

     

从中读取配置   /path/to/application/config.xml

     

时间:0秒,内存:5.00Mb

     

没有执行测试!

现在,当我尝试使用“path / to / application / tests /”目录中的命令“phpunit test.php”从命令行运行这些测试时,我得到以下控制台输出:

  

Sebastian Bergmann的PHPUnit 3.7.15。

     

     

时间:0秒,内存:3.25Mb

     

好(1次测试,5次断言)

很明显,我没有正确告诉Makegood在哪里找到测试文件/如何运行测试,但我似乎无法确定如何解决这个问题。对于所有PHPUnit组件如何在Eclipse中组合在一起,我无疑有一个糟糕的心智模型,因此非常感谢帮助我理解该体系结构的任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:2)

'运行所有测试'不会像您尝试使用它一样工作。 “运行所有测试”运行,测试您选择作为“测试文件夹”之一(见下文)

enter image description here

我实际上将我的测试文件夹更改为此

enter image description here

它只运行RuleData文件夹中的测试。您可以点击任何您喜欢的地方,“运行所有测试”将以这种方式运行。如果您只想运行文件夹中的测试,请选择“运行测试”

此外,我的phpunit xml配置位于测试目录中。

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
         backupStaticAttributes="false"
         backupGlobals="false"
         bootstrap="./../application/third_party/CIUnit/bootstrap_phpunit.php"
         cacheTokens="false"
         colors="false"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         forceCoversAnnotation="false"
         mapTestClassNameToCoveredClassName="false"
         printerClass="PHPUnit_TextUI_ResultPrinter"

         processIsolation="false"
         stopOnError="false"
         stopOnFailure="false"
         stopOnIncomplete="false"
         stopOnSkipped="false"
         testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"

         strict="false"
         verbose="true"

         >
    <php>
        <ini name="memory_limit" value="2047M" />
    </php>

    <testsuites>
        <testsuite name="AllTests">
            <directory>.</directory>
        </testsuite>
    </testsuites>

    <filter>
      <blacklist>
        <directory suffix=".php">./../../</directory>
        <file></file>
        <exclude>
          <file></file>
        </exclude>
      </blacklist>
      <whitelist processUncoveredFilesFromWhitelist="true">
          <directory suffix=".php">./../application/models</directory>
          <directory suffix=".php">./../application/controllers</directory>
          <directory suffix=".php">./../application/libraries</directory>
          <directory suffix=".php">./../application/helpers</directory>
        <file></file>
        <exclude>
          <directory suffix="index.php">./../application</directory>
          <file></file>
        </exclude>
      </whitelist>
    </filter>
</phpunit>