3

我正在尝试为文件导入导出模块编写单元测试。

我的一种方法检查传递的文件名是否存在。

这将如何被嘲笑并编写测试以检查文件是否存在?

4

3 回答 3

5

单元测试应该证明代码单元在完全隔离的情况下正确运行。如果您的测试依赖于文件系统正常运行才能通过,那么您的测试不是最理想的,并且可能在任何给定的测试运行中对您撒谎。

像任何实验一样,当你有多个变量在起作用时,你不能确定你的结果。对于与文件系统交互的 PHP 代码,最好使用自定义流包装器模拟文件系统(通常是vfsStream,但如果您真的愿意,可以轻松编写自己的流包装器)。

$noTest < $testWithFileSystemDependency < $testThatMocksFileSystem

通常,这是通过将文件路径传递给直接使用它们的方法来完成的:

<?php
function myFunction($someFilePath) {
    // do stuff
}

通过这种方式,您可以模拟文件系统并传入一个可测试的虚拟路径,该路径将按照您模拟它的方式运行。

于 2012-08-26T22:58:01.390 回答
1

你写了两个测试。一个创建文件并期望您的方法成功,另一个确保文件不存在并期望您的方法失败。

于 2012-08-26T22:42:29.327 回答
1

就我个人而言,我只是_files在测试目录中创建目录并在那里创建文件。或在/tmp.

有一种模拟 fs 的方法:http ://www.phpunit.de/manual/current/en/test-doubles.html#test-doubles.mocking-the-filesystem但根据我的经验 - 我更喜欢真正的 FS 操作(在这种情况下)。

于 2012-08-26T22:43:08.767 回答