为什么全局phpunit会忽略xml配置文件?

时间:2016-07-17 22:42:43

标签: php xml phpunit composer-php travis-ci

我已经启动并运行了一个小型Web应用程序,其中包含了phpunit测试。它是用composer构建的,并且具有非常标准的目录结构:

src/
    application files
tests/
    bootstrap.php
    test files
web/
    index.php
.travis.yml
composer.json
composer.lock
phpunit.xml

phpunit.xml内容:

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

<phpunit boostrap="./tests/bootstrap.php">
    <testsuites>
        <testsuite name="Chronos">
            <directory>./tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

bootstrap.php内容:

<?php

require __DIR__ . "/../vendor/autoload.php";

我的问题

运行以下命令可以正常运行,我的测试通过:

$ vendor/bin/phpunit
PHPUnit 4.8.26 by Sebastian Bergmann and contributors.

..

Time: 104 ms, Memory: 4.00MB

OK (2 tests, 2 assertions)

但是,当我运行全局安装的phpunit版本时,它失败了:

$ phpunit
PHPUnit 4.8.26 by Sebastian Bergmann and contributors.

EE

Time: 117 ms, Memory: 4.00MB

There were 2 errors:

1) WelcomeTest::testReturnsAPayload
Error: Class 'Equip\Payload' not found

/Users/tony/Documents/projects/chronos/tests/Domain/WelcomeTest.php:13

2) WelcomeTest::testReturnsOkStatus
Error: Class 'Equip\Payload' not found

/Users/tony/Documents/projects/chronos/tests/Domain/WelcomeTest.php:13

FAILURES!
Tests: 2, Assertions: 0, Errors: 2.

似乎在我项目的根目录中运行phpunit的全局安装不包括/解析我的phpunit.xml文件(它指定了自动加载器)。我在TravisCI上得到了相同的结果。

有谁知道为什么会这样?我可以在我的.travis.yml文件中指定phpunit的本地版本,但我不知道是什么原因导致了这一点。

1 个答案:

答案 0 :(得分:0)

啊我明白了。我的phpunit.xml文件中的愚蠢错字(缺少“boostrap”中的t)。原来phpunit的作曲家版本自动包含自动加载,所以它工作正常,而全局phpunit包括phpunit.xml,因此没有找到引导脚本。