PHPunit рефакторинг чтения файла в EOF тест для работы - PullRequest
0 голосов
/ 14 мая 2018

Я новичок в TDD и PHPUnit, поэтому, пожалуйста, прости меня, если логика моей тестовой функции не имеет смысла.

У меня есть тестовая функция с именем test_read_to_end_of_file_is_reached, которая получает зеленый цвет, как написано в моем классе inputTest, подтверждая, что она читает в конец файла.

Я пытаюсь преобразовать часть чтения / открытия в функцию в моей модели Vendors под названием 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);
    }

Это все работает, я просто не уверен, смогу ли я упростить тест еще. что в конечном итоге позволит мне читать текстовый файл и разбирать построчно на основе того, что читается для воспроизведения содержимого на консоли.

...