Я новичок в 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);
}
Это все работает, я просто не уверен, смогу ли я упростить тест еще.
что в конечном итоге позволит мне строить после чтения текстового файла и разбора построчно на основе того, что читается для воспроизведения содержимого на консоли.
Задача ещё не решена.
Других решений пока нет …