Netbeans 8.2中的PHPUnit插件给出致命错误:尝试运行测试用例时找不到类“ PHPUnit_Framework_TestSuite”

时间:2019-03-27 15:27:11

标签: php phpunit netbeans-8 netbeans-plugins phpunit-testing

当我尝试在Netbeans中运行PHPUnit时,会遇到此错误:

Fatal error: Class 'PHPUnit_Framework_TestSuite' not found in C:\Users\julian\AppData\Roaming\NetBeans\8.2\phpunit\NetBeansSuite.php on line 63
Done.

在Netbeans和CLI中都会发生这种情况。


我通过导航到以下目录开始调试此问题:C:\Users\julian\AppData\Roaming\NetBeans\8.2\phpunit\

该目录包含一个文件:NetBeansSuite.php。我打开它寻找线索,并看到以下行:

class NetBeansSuite extends PHPUnit_Framework_TestSuite {

我没有看到任何具体的PHPUnit_Framework_TestSuite类。

下一步是NetBeansSuite.php文件没有任何可能包含include类的requirePHPUnit_Framework_TestSuite语言构造。

因此,为了解决致命错误问题,我应该在PHPUnit_Framework_TestSuite中加入NetbeansSuite.php

这是个问题,因为我不是NetbeansSuite.php的作者。 最重要的是NetbeansSuite.php的作者在评论部分中写道:

 <b>WARNING: User changes to this file should be avoided.</b>

我在评论中进一步阅读:

 * Copyright 2010 Oracle and/or its affiliates. All rights reserved.

我认为NetbeansSuite.php文件已过时。


在网上搜索使我想到了这个stackoverflow问题:

Why, Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...?

他们声称使用命名空间版本的PHPUnit_Framework_TestCase应该可以解决此问题。所以我做了他们写的。

我顽固地更改了NetBeansSuite.php。 旧代码:

class NetBeansSuite extends PHPUnit_Framework_TestSuite {

新代码:

require_once 'PHPUnit/Autoload.php';

use PHPUnit\Framework\TestCase;

class NetBeansSuite extends TestCase {

我试图再次运行测试用例,这是不幸的结果:

Fatal error: Declaration of CalculatorTest::setUp() must be compatible with PHPUnit\Framework\TestCase::setUp(): void in C:\wamp64\www\test\CalculatorTest.php on line 97

换句话说,这给了我一个新问题。

我的系统:

Windows 10
WAMP
php 7.2.14
PHPUnit 8.0.6
Netbeans version 8.2 (Netbeans PHPUnit plugin installed through Tools > Plugins. Version: 0.26.2)

我的问题是:有人知道NetBeansSuite.php文件在上述系统中应如何吗?


我的测试案例中的setUp方法:

protected function setUp()
{
    $this->object = new Calculator;
}


更新:骨架生成器项目被放弃。 查看链接:https://github.com/sebastianbergmann/phpunit-skeleton-generator 因此,为了解决Declaration of CalculatorTest::setUp() must be compatible with PHPUnit\Framework\TestCase::setUp()错误,应在测试用例中使用相应的返回类型声明。

// I added : void
protected function setUp(): void
{
    $this->object = new Calculator;
}

// : void needs to be added in the tearDown method as well
protected function tearDown(): void

不幸的是,这给我带来了新的问题:

Warning: require_once(PHPUnit/Autoload.php): failed to open stream: No such file or directory in C:\wamp64\www\test\CalculatorTest.php on line 4

Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php' (include_path='.;C:\php\pear') in C:\wamp64\www\test\CalculatorTest.php on line 4

我通过手动安装PEAR并在C:\php\PEAR中创建一个新的“ PHPUnit”目录来解决了这个问题。然后,我创建了一个新的Autoload.php文件。我用位于https://www.php-fig.org/psr/psr-4/Autoload.php示例文件填充了PSR-4的内容。

这解决了自动加载问题,但是在执行测试用例期间遇到了一个新问题。

C:\wamp64\www\test>phpunit CalculatorTest.php
PHPUnit 8.0.6 by Sebastian Bergmann and contributors.



Time: 170 ms, Memory: 10.00 MB

No tests executed!

它显示No tests executed!,但我有5个测试。 我对此提出一个新问题。 这里是:PHPUnit 8 installed on Windows through PHAR shows No tests are executed

2 个答案:

答案 0 :(得分:1)

实际上,最初确实应该更新名称空间,因为在最新版本的PHPUnit中已对其进行了更改。

该错误表明您的CalculatorTest::setUp()方法与PHPUnit版本不兼容。您可以在这里发布该方法吗?

答案 1 :(得分:0)

对于同一问题,我直接将文件“ NetBeansSuite.php”(C:\ Users \ USERNAME \ AppData \ Roaming \ NetBeans \ 8.2 \ phpunit)更改如下:

class NetBeansSuite extends \PHPUnit\Framework\TestSuite {

之后,CLI和Netbeans正常运行。