PHPunit 重构读取文件到 EOF 测试才能发挥作用

PHPunit refactoring read file to EOF test to function

提问人:hello world 提问时间:5/14/2018 更新时间:5/14/2018 访问量:184

问:

我是 TDD 和 PHPUnit 的新手,所以如果我的测试函数逻辑没有意义,请原谅我。

我有一个名为 test_read_to_end_of_file_is_reached 的测试函数,它在我的 inputTest 类中写入时传递绿色,批准它读取到文件末尾。

我正在尝试将读取/打开部分重构为我的供应商模型中名为 readFile 的函数

最初,InputTest

<?php

class InputTest extends \PHPUnit\Framework\TestCase{

    protected $vendors;

    public function setUp(){
        $this->vendors = new \App\Models\Vendors;
    }

    /** @test */
    public function test_that_input_file_exists(){
        $this->assertFileExists($this->vendors->getFileName());
    }

    /** @test */
    public function test_read_to_end_of_file_is_reached(){
        $fileName = $this->vendors->getFileName();
        $file = fopen($fileName, "r");
        // loop until end of file
        while(!feof($file)){
            // read one character at a time
            $temp = fread($file, 1);
        }

        $this->assertTrue(feof($file));
        //close file
        fclose($file);
    }

我试图将它分离成一个函数

供应商类:

<?php

namespace App\Models;
class Vendors
{
    protected $fileName = "app/DataStructures/input.txt";

    public function setFileName($fileName){
        $this->fileName = trim($fileName);
    }

    public function getFileName(){
        return trim($this->fileName);
    }

    public function readFile(){
        $fileName = $this->getFileName();
        $file = fopen($fileName, "r");

        // loop until end of file
        while(!feof($file)){
            // read one character at a time
            $temp = fread($file, filesize($fileName));
            var_dump($temp);
        }
        return $file;
        fclose($file);
    }
}

我的重构测试:

    /** @test */
    public function test_read_to_end_of_file_is_reached(){
        $fileName = $this->vendors->getFileName();
        $file = fopen($fileName, "r");
        $this->assertTrue(feof($this->vendors->readFile()));
        //close file
        fclose($file);
    }

这一切都有效,我只是不确定我是否可以进一步简化测试。 这最终将允许我在读取文本文件的基础上进行构建,并根据读取的内容逐行解析,以在控制台上重现内容。

php 单元测试 phpunit 重构 EOF

评论

1赞 Lawrence Cherone 5/14/2018
您应该测试该方法的功能,并且它执行您想要的操作(读取文件),更改代码以适应测试并返回没有意义的文件指针。此外,您现在在关闭指针之前返回死代码。
1赞 Lawrence Cherone 5/14/2018
您可以模拟 php 函数以在调用时返回不同的值,例如您可以模拟 fopen、fread 失败或 feof 返回 true 等,如果您试图获得覆盖率,处理破损是您要测试的内容,尽管我没有看到条件,所以它矫枉过正。
1赞 Lawrence Cherone 5/14/2018
另外,你的测试应该在 VendorsTest 案例中。.
0赞 hello world 5/14/2018
我一直在努力想出一个与 readFile 匹配的断言条件,它不完全是 assertFileIsReadable()。但我同意这是矫枉过正,我可能只是在没有测试的情况下写出 readFile 函数。
1赞 Lawrence Cherone 5/14/2018
你应该测试它,如果它失败,它将在 fopen 上,所以我们的想法是处理它,比如抛出异常或返回 false,然后测试它们。所以一个测试是好的,一个是坏的,但都通过了。然后,它将引导您在getFileName中添加检查,证明它存在或使用realpath等,如果它为空,则返回false,然后在读取文件方法中$fileName您可以检查它是否为空并返回false等。

答: 暂无答案