如果从不同的目录运行PHPUnit失败

时间:2014-07-26 19:39:50

标签: php unit-testing testing phpunit

我将名称空间的webapp放在名为' library'的文件夹中。如果我在目录中并运行phpunit,测试运行就可以了。但是,如果我离开目录并运行phpunit library/ PHPUnit抱怨它无法找到我使用use语句调用的类。

这是我的phpunit.xml,它位于'库中。目录:

<?xml version="1.0" encoding="UTF-8"?>

<!-- http://phpunit.de/manual/4.1/en/appendixes.configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
         backupGlobals="false"
         colors="true"
         bootstrap="./tests/testsBootstrap.php"
        >
    <testsuites>
        <testsuite name="JTW Framework Test Suite">
            <directory>./</directory>
        </testsuite>
    </testsuites>

    <filter>
        <whitelist>
            <directory>./</directory>
            <exclude>
                <directory>./tests</directory>
            </exclude>
        </whitelist>
    </filter>

    <logging>
        <log type="coverage-html" target="./tests/report" charset="UTF-8" yui="true" />
    </logging>
</phpunit>

以下是使用课程(缩短)的测试:

<?php
namespace Tests\Assets;

use Jtw\Assets\Reader;

class ReaderTest extends \PHPUnit_Framework_TestCase
{
    public function testYamlReader()
    {
        $yamlFile = __DIR__ . '/assets/reader.yml';
        $yamlArray = Reader::read($yamlFile);

        $this->assertTrue(is_array($yamlArray));
        $this->assertEquals(2, count($yamlArray));
        $this->assertTrue(in_array('baz', $yamlArray));
        $this->assertTrue(is_array($yamlArray['test']));
        $this->assertEquals('baz', $yamlArray['qux']);
    }
}

我的&#39; testsBootstrap.php&#39; file是引导WordPress并调用composer的自动加载文件。

有关为什么测试可以在“库”中运行良好的任何想法&#39;目录,但不是从外面,但指向它?

如果您希望在GitHub account上看到完整的设置。

1 个答案:

答案 0 :(得分:2)

问题来自:

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
         backupGlobals="false"
         colors="true"
         bootstrap="./tests/testsBootstrap.php"
        >

您的测试需要运行引导程序才能运行。当您不在library目录中时,PHPUnit没有运行引导程序,因此测试未正确设置并失败。

从目录运行测试会导致PHPUnit为您运行引导程序。

要让它们正常运行,您可以使用--bootstrap选项。

phpunit --bootstrap <path to library>/tests/testBootstrap.php <tests you want to run>