我将名称空间的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上看到完整的设置。
答案 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>