phpunit 抛出未捕获的异常'PHPUnit_Framework_Exception

Posted

技术标签:

【中文标题】phpunit 抛出未捕获的异常\'PHPUnit_Framework_Exception【英文标题】:phpunit throws Uncaught exception 'PHPUnit_Framework_Exceptionphpunit 抛出未捕获的异常'PHPUnit_Framework_Exception 【发布时间】:2011-08-12 06:46:21 【问题描述】:

我有一个 Zend Framework 项目,想用单元测试来测试它。

在测试文件夹中,我有phpunit.xml 如下;

<phpunit bootstrap="./application/bootstrap.php" colors="true">
<testsuite name="Application Test Suite">
    <directory>./</directory>
</testsuite>

<filter>
    <whitelist>
        <directory suffix=".php">../application/</directory>
        <exclude>
            <directory suffix=".phtml">../application/</directory>
            <file>../application/Bootstrap.php</file>
            <file>../application/controllers/ErrorController.php</file>
        </exclude>
    </whitelist>
</filter>

<logging>
    <log type="coverage-html" target="./log/reprot" charset="UTP-8"
    yui="true" highlight = "true" lowUpoerBound="50" highLowerBound="80"/>
    <log type="textdox" target="./log/testdox.html" />
</logging>

我在 /tests/application 文件夹中有bootstrap.php,如下所示:

    <?php
error_reporting(E_ALL | E_STRICT);

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

require_once 'Zend/Loader/Autoloader.php';

require_once 'controllers/ControllerTestCase.php';
Zend_Loader_Autoloader::getInstance();

当我转到命令行时,运行以下命令

phpunit --configuration phpunit.xml

抛出异常:

PHP 致命错误:带有消息的未捕获异常“PHPUnit_Framework_Exception”
'“Application Test Suite.php”和“Application Test Suite.php”都不能
打开。在 D:\PHP\php5\PEAR\PHPUnit\Util\Skeleton\Test.php:102
堆栈跟踪:
#0 D:\PHP\php5\PEAR\PHPUnit\TextUI\Command.php(157): PHPUnit_Util_Skeleton_Test-
>__construct('应用测试...', '')
#1 D:\PHP\php5\PEAR\PHPUnit\TextUI\Command.php(129): PHPUnit_TextUI_Command->运行
(数组,真)
#2 D:\PHP\php5\phpunit(53): PHPUnit_TextUI_Command::main()
#3 主要
  在第 102 行的 D:\PHP\php5\PEAR\PHPUnit\Util\Skeleton\Test.php 中抛出

我该如何解决?

【问题讨论】:

【参考方案1】:

我在相同的设置下遇到了同样的问题。据我了解,较新版本的 PHPUnit 至少需要一项实际测试才能正常运行。创建一个简单的测试后,它就可以工作了。

myProject/tests/application/DemoTest.php

<?php
class DemoTest extends ControllerTestCase

    public function setUp() 
        parent::setUp();
    

    public function testCanDoUnitTest() 
        $this->assertTrue(true);
    

【讨论】:

【参考方案2】:

您会注意到它抛出了异常,因为它正在寻找与您为测试套件提供的name 同名的文件。您需要实际编写一个测试套件,然后将该测试套件的名称提供给您的配置:http://www.phpunit.de/manual/3.2/en/organizing-test-suites.html

【讨论】:

我在包含 bootstrap.phpaddTestSuite('MyApp'); // ... 返回 $suite; 还是一样的错误 您是否更改了您在 XML 中提供的名称?这需要直接对应于测试套件类的文件名减去扩展名。因此,如果您刚刚发布的代码在 MyApp.php 中,那么您的 xml 应该如下所示:&lt;testsuite name="MyApp"&gt; 而不是 &lt;testsuite name="Application Test Suite"&gt; 是的,我已经在xml文件中改了名字,报错是一样的 @ratzip:怀疑你是否有完全相同的错误。请发布新的错误消息,除非它完全相同 现在,错误消失了,但它给出了另一个错误,***.com/questions/5789733/…,我是 zend 和 phpunit 的新手,它真的让我发疯,你能帮我解决这个问题吗?【参考方案3】:

我注意到您没有使用包含多次出现的&lt;testsuite&gt;&lt;testsuites&gt;

这是我的 phpunit.xml,它适用于 Zend Framework 项目:

<testsuites>
  <testsuite name="UnitTests">
    <directory>./library</directory>
  </testsuite>
  <testsuite name="ApplicationTests">
    <directory>./application</directory>
  </testsuite>
</testsuites>

【讨论】:

以上是关于phpunit 抛出未捕获的异常'PHPUnit_Framework_Exception的主要内容,如果未能解决你的问题,请参考以下文章

PHPUnit 显示抛出致命错误异常的传递方法

Symfony/PhpUnit - 如何测试服务中是不是抛出异常

PHPUnit 断言抛出异常?

机油测试引发未捕获的异常

PHPUnit 7:无法断言抛出类型为 InvalidArgumentException的异常

UICollectionView 使用自定义布局抛出未捕获的异常