我有一个控制器,责任是将与请求一起传递的文件(通过正文POST)复制到web/images
下的特定路径。路径由生活在特定Controller
中的属性指定。
我想要做的是使用功能测试进行测试,但我不希望它覆盖我项目中的文件,所以我想使用vfs
或在我的测试用例发送请求之前更改路径。
有没有一个很好的直接方法来实现这一目标?
答案 0 :(得分:0)
常见的方法是将可能在环境之间更改的配置加载为环境变量。 (我以前从未使用过symfony,所以可能有工具来帮助env变种)
上传路径可以是
$upload_path = getenv('WEB_IMAGE_UPLOAD_PATH') ?
getenv('WEB_IMAGE_UPLOAD_PATH') : 'web/images'
这将允许您在集成模式下启动服务器时指定临时(/tmp
?)目录。
很酷,(免责声明:我不是一个php人)看起来php有IO流可能有助于功能测试,并且可以轻松清理。
我相信你可以设置你的WEB_IMAGE_UPLOAD_PATH'成为其中一个流
答案 1 :(得分:0)
我会尝试自己回答:我重构了我的代码,以便拥有一个属性来指定我想要复制/覆盖我的文件的路径。
然后,在PHPUnit类中,我用vfsStream路径替换object属性的值。通过这样做我得到我需要的行为,而不触及我的真实文件/路径。一切都将存在于虚拟文件系统中,我的对象将使用它。
参数对于干净且可重复使用的代码很重要,但是当你想进行单元测试时更是如此:我认为单元测试可以帮助我强制参数化所有内容,而不是在你没有那么多时重新编写硬编码时间。为了帮助我编写单元测试,我创建了一个访问方法和属性的类,而不管它们的可访问性。
我很确定已经有了更复杂的东西,但是这一课在这一刻充满了我的需求。希望它有所帮助: - )