2

首先,我使用 codeigniter 作为我的 PHP 框架。很抱歉问这个问题,我正在尝试掌握单元测试的想法。他们说在开发站点功能之前进行单元测试是一种很好的做法。所以在这里我很想学习这个:

我的方法:

function download()
{
    $data = file_get_contents("resources/temp/file.doc");
    $name = "new_file.doc";

    force_download($name, $data);
}

然后我用 testDownload 方法创建了一个测试控制器:

public function testDownload()
{       
    //Call the controller method
    $this->CI->download();

    //Fetch the buffered output
    $out = output();

    $this->assertFalse(preg_match('/(error|notice)/i', $out));
}

然后我测试它: phpunit test.php 并给了我这个:

F[CIUnit] PHP Error: Warning - file_get_contents(resources/temp/file.doc): failed to open stream: No such file or directory File Path: controllers/contract.php (line: 22)


Time: 4 seconds, Memory: 7.50Mb

There was 1 failure:

1) ContractTest::testDownload
Failed asserting that 0 is false.

我只是想测试它是否有正确的路径。或者我真的需要一个测试脚本来下载文件吗?对不起,我只是困惑。

4

2 回答 2

2

“没有这样的文件或目录”的原因:

当您使用 PHPUnit 进行测试时,当前工作目录将相对于您运行 phpunit 的目录。但是在代码中,你会写相对于你的 webserver 目录。

顺便说一句,单元测试应该测试您编写的代码。在单元测试中测试外部资源似乎不是一个好主意。

于 2012-07-16T14:39:19.227 回答
1

可能是因为 0 只是一个假值,但并非字面意义上的假,而 assertFalse 使用 ===。使用 assertEquals 或其他东西来检查 0 。

于 2012-07-16T08:41:26.263 回答