用于下载文件的单元测试

时间:2012-07-16 08:38:56

标签: php unit-testing codeigniter phpunit

首先,我使用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.

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

2 个答案:

答案 0 :(得分:2)

“没有此类文件或目录”的原因:

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

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

答案 1 :(得分:1)

可能因为0只是一个假值而不是字面上的假,而assertFalse正在使用===。使用assertEquals或其他东西来代替0来检查。