单元测试文件导入导出模块

时间:2012-08-26 22:40:35

标签: php unit-testing phpunit

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

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

如何对此进行模拟并编写测试以检查文件是否存在?

3 个答案:

答案 0 :(得分:5)

单元测试应该证明一个代码单元在完全隔离中正常运行。如果您的测试依赖于文件系统正常运行以便通过,那么您的测试不是最理想的,可能会在任何给定的测试运行中对您说谎。

与任何实验一样,当您有多个变量在播放时,您无法确定结果。对于与文件系统交互的PHP代码,最好使用自定义流包装器(通常为vfsStream)来模拟文件系统,但如果您真的想要,可以轻松编写自己的流包装器。

$noTest < $testWithFileSystemDependency < $testThatMocksFileSystem

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

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

通过这种方式,您可以模拟文件系统并传入一个可测试的虚拟路径,该路径将表现出您嘲笑它的行为方式。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我个人只是在tests目录中创建_files目录并在那里创建文件。或者在/tmp

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