PHPUnit将无法找到我的测试文件或直接执行它们

时间:2017-08-07 13:14:41

标签: php phpunit

我的PHPUnit是通过Composer安装的(PHPUnit 3.7.21) 我有以下目录结构:

.
├── Code
├── Test
│   ├── Php
│   │   └── PlanningModuleTest.php
│   └── bootstrap.php
└── phpunit.xml

执行时

$ phpunit

从项目根目录,我得到以下输出:

PHPUnit 3.7.21 by Sebastian Bergmann.

Configuration read from D:\Development\...\phpunit.xml

Time: 40 ms, Memory: 4.00MB

No tests executed!

我的phpunit.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
    colors="true"
    bootstrap="Test/bootstrap.php"
>
    <testsuites>
        <testsuite name="pms">
            <directory  suffix="Test.php">./Test/Php/</directory>
        </testsuite>
    </testsuites>
    <php>
        <ini name="display_errors" value="true"/>
    </php>
</phpunit>

我有一个文件PlanningModuleTest.php,内容如下:

记录我的PHP文件的第一部分:

<?php

use jamesiarmes\PhpEws\Enumeration\UnindexedFieldURIType;
use PHPUnit\Framework\TestCase;

class PlanningModuleTest extends TestCase
{
    public function setUp()
    {
        $_SESSION = array();
        require_once('Code/Config.php');
        parent::setUp();
    }

    public function testExchangeCalendarItemCreation()
    {
        $this->assertInstanceOf(ExchangeCalendarItem::class, new ExchangeCalendarItem());
    }

    public function testExchangeCalendarItem()
    {
        // ...
    }
}

所以这应该是正确的,因为PHPUnit会检查文件和类名是否以Test.php结尾。

为什么phpunit没有执行我的测试?

修改

我尝试用

直接执行我的测试
$ phpunit --verbose --debug Test\Php\PlanningModuleTest.php

然后返回:

Class 'Test\Php\PlanningModuleTest' could not be found in 'D:\Development\Git\projectmanagement\Test\Php\PlanningModuleTest.php'.`

2 个答案:

答案 0 :(得分:1)

正如评论中已经建议的那样,在我们开始调试与使用全局安装的phpunit版本相关的问题之前,这个版本与您在项目中安装的版本明显不同,请尝试运行

$ ./vendor/bin/phpunit

代替。

首先引起注意的是测试类缺少命名空间,而它看起来应该有一个:

<?php

namespace Test\Php;

use jamesiarmes\PhpEws\Enumeration\UnindexedFieldURIType;
use PHPUnit\Framework\TestCase;

class PlanningModuleTest extends TestCase
{
    // ...
}

然后还要确保在composer.json中配置并记录测试代码的命名空间要求:

并且您的自动加载已在composer.json中正确设置,例如

{
    "autoload-dev": {
        "psr-4": {
            "Test\\": "Test/"
        }
    }
}

由于您尚未与我们分享,请确保Test/bootstrap.php包含

<?php

require_once __DIR__ . '/../vendor/autoload.php';

正确设置自动加载。

答案 1 :(得分:0)

您必须使用项目目录中的phpunit命令,如下所示:

project> phpunit

另外你的测试套件必须是这样的:

<testsuite name="pms">
    <directory>Test/Php</directory>
</testsuite>