【发布时间】:2021-02-04 18:27:01
【问题描述】:
我有一个函数可以生成 csv 文件并返回下载文件的 URL。问题是由于文件很多,我正在使用Uuid::uuid4()->toString()。如何使用 Codeception 编写单元测试来验证给定函数是否有效?
测试的本质:我必须将一个数组传递给函数来创建一个csv,函数返回带有数据的文件的路径,需要检查函数返回的文件路径是否正确。
是否可以检查文件是否包含某些信息,即数据导出的正确性,如果是,如何进行?
要测试的类:
class CsvExport
{
const UPLOAD_DIRECTORY = "uploads/csv/";
public function create(array $data): string
{
$id = Uuid::uuid4()->toString();
if (empty($data)) {
throw new \DomainException('Array is empty');
}
$file = $this->buildFileByPath($id);
$write = fopen($file, 'w+');
foreach ($data as $items) {
fputcsv($write, $items);
}
fclose($write);
return $file;
}
private function buildFileByPath(string $id): string
{
return self::UPLOAD_DIRECTORY . $id . '.csv';
}
}
以及我编写测试的失败尝试:
class CsvExportTest extends Unit
{
/**
* @var UnitTester
*/
protected UnitTester $tester;
public function testCsvExport():void
{
$data = $data = [['Name', 'age', 'Gender']];
$service = new CsvExport();
$path = $service->create($data);
Assert::assertEquals($path, $service->create($data));
}
}
提前致谢!
【问题讨论】:
-
请分享更多细节 - 你想测试什么? CSV 文件是否包含某些内容?也许 Flysystem 可以帮你抽象文件系统
-
我应您的要求补充了问题
-
也想一想,真的是你要测试的返回路径吗?这告诉你什么?就其本身而言,它不会告诉您文件是否使用正确的内容创建,这似乎是该功能的主要目标。该路径实际上由
$this->buildFileByPath($id);处理,您可以自行测试。 -
如何查看文件内容?
-
为什么不打开文件阅读一下?
标签: php unit-testing codeception