1

我在 Kohana 3.2 中正确设置单元测试时遇到问题。

我安装了 PHPUnit。我更改了引导程序以激活 Kohana 的单元测试模块。我还将 index.php 文件更改为如下所示:

if ( ! defined('SUPPRESS_REQUEST'))
{
    echo Request::factory()
        ->execute()
        ->send_headers()
        ->body();
}

我在我的应用程序文件夹中创建了一个文件夹测试。在其中,我插入了一个 phpunit.xml 文件,如下所示:

<phpunit colors="true" bootstrap="../../index.php">
<testsuites>
    <testsuite name="Kohana Tests">
        <directory>./</directory>
    </testsuite>
</testsuites>

我有两个问题(第一个是我真正需要回答的问题):

1-当我从命令行进入测试并尝试运行 phpunit 时,似乎 SUPPRESS_REQUEST 永远不会设置为 true。请求被执行,因此不运行任何测试。我能够成功运行测试的唯一方法是暂时注释掉 index.php 中的整个 Request::factory() 行。有谁知道如何解决这个问题?如果我应该在某处添加一个 define('SUPPRESS_REQUEST', true) ,我应该在哪里做呢?我是 Kohana 和 PHPUnit 的新手。

2- PHPUnit 抱怨没有设置变量 REMOTE_ADDR。

PHP Notice:  Undefined index: REMOTE_ADDR in
/Users/**/Sites/root/application/bootstrap.php on line 76

这实际上并不是一个大问题,因为尽管如此,测试似乎仍在运行,但我想知道是否有人知道我是否应该在某个特定的地方设置这个变量。

4

1 回答 1

2

在 modules/unittest 中有一个名为 bootstrap.php 的文件,它与 phpunit 完美配合。

我的 phpunit.xml 引用了该引导程序是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true" bootstrap="../../modules/unittest/bootstrap.php">
    <testsuites>
        <testsuite name="Kohana Tests">
            <directory>./</directory>
        </testsuite>
    </testsuites>
</phpunit>

此外,对于 REMOTE_ADDR 问题,当 phpunit 运行 PHP 的 CLI 版本时,我认为它无法访问 REMOTE_ADDR 变量。如果您查看 unittest 的引导程序,它不会使用与 http 相关的全局变量。

我不确定为什么必须在引导程序中运行 Request::factory 代码。在我的 vanilla 3.2 安装中,Request::factory 代码位于 index.php 而不是 bootstrap.php 中,并且没有对 SUPRESS REQUEST 的任何引用。您可能有一些来自 3.2 之前安装的挥之不去的文件需要清理。

于 2012-03-25T15:08:41.907 回答