PHPUnit测试类无法扩展另一个类

时间:2018-07-30 07:29:40

标签: php laravel unit-testing phpunit phpunit-testing

当前,我有一个基础测试类,我的测试应在其中扩展:

<?php
namespace BlaBla;
class BasicTestCase extends UnitTest {
    public function testPage()
    {
        $this->assertTrue(True);
    }
}

在我的测试课中:

<?php
use BlaBla\BasicTestCase;
class BasicTest extends BasicTestCase {
}

我的问题是,如果我运行phpunit并想测试BasicTest,总是会收到错误BasicTestCase class not found

搜索之后,我了解到phpunit不使用composer,但是我无法解决此冲突。

更新:

使用require_oncecomposer dump-autload只会产生相同的错误(找不到Base类)。
也为该类提供了名称空间,并没有解决问题(总是相同的错误)。

这里是phpunit.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
     backupStaticAttributes="false"
     bootstrap="phpunit.php"
     colors="true"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     processIsolation="false"
     stopOnFailure="false"
     syntaxCheck="false">
<testsuites>
    <testsuite name="Application Test Suite">
        <directory>./tests/</directory>
    </testsuite>
     <testsuite name="Core Test Suite">
        <directory>./vendor/ipo/prodis-core/tests/</directory>
    </testsuite>
</testsuites>
<php>
    <env name="APP_ENV" value="testing"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="QUEUE_DRIVER" value="sync"/>
    <env name="DB_CONNECTION" value="sqlite_testing"/>
</php>

composer.json很长,因此我在此处添加了导入:

"autoload-dev": {
    "classmap": [
      "tests/AppTestCase.php",
      "tests/AppTestCaseClassic.php",
      "vendor/ipo/prodis-core/tests/TestCase.php"
    ]
},

对于结构,我在Laravel的文件夹测试下的BasicTest下添加了第二个类Services\Client\Testing

我注意到的是phpunit总是在Base class的同一位置搜索BasicTest

1 个答案:

答案 0 :(得分:1)

bootstrap="phpunit.php"

此行意味着PHPUnit将在运行测试之前包含phpunit.php文件(从项目的根目录开始)-您应在其中包含自动加载器:

<?php

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

// rest of tests bootstrap

或者,如果您不需要任何其他引导程序,则可以将自动加载器直接作为引导程序文件包含在phpunit.xml中:

bootstrap="vendor/autoload.php"

另一件事是自动加载规则。很难说情况如何,因为您没有共享文件的约束。但是,如果您将名称空间用于测试基类,则可以为这些类注册常规的psr-4自动加载规则:

"autoload-dev": {
    "psr-4": {
        "BlaBla\\": "tests/"
    }
},

然后将您的BasicTestCase类定义放在tests/BasicTestCase.php中。