在django中单元测试FileField的干净方法是什么?
我有一个带有FileField的模型。我想对它进行单元测试。 django测试框架有很好的方法来管理数据库和电子邮件。 FileFields有类似的东西吗?
如何确保单元测试不会污染真实的应用程序?
提前致谢
PS:我的问题几乎是使用测试装置的Django测试FileField的重复,但它没有接受的答案。只想重新询问这个话题是否有新内容。
没有找到相关结果
已邀请:
4 个回复
悲帽慑彤电
的内容轻松重置上载目录。这种方法在某些方面是最好的,因为它不涉及代码更改,并且只要您从良好的测试数据开始就可以保证工作。 如果你在测试模型的保存方法后实际上不需要对该文件做任何事情,我建议使用python的优秀Mock库来完全伪造
实例(例如
),这样你就可以完全避免对文件进行更改处理逻辑。 Mock库有两种方法可以在一个测试方法中全局修补Django的File类,这个方法就像这样容易。 如果你需要一个真实的文件(即作为测试的一部分,使用外部脚本进行处理等),你可以使用类似于Mirko的例子,并在确保它存储在适当的地方之后创建一个File对象。 - 这有三种方法: 让你的测试ѭ3指向一个临时目录(参见Python tempfile模块的
函数)。这个工作正常,只要你有一个单独的
,你用它作为源代码的一部分的媒体文件。 使用自定义存储管理器 在每个File实例上手动设置文件路径,或者使用自定义upload_to函数指向您的测试设置/拆除进程清除的位置,例如
下的test子目录。 编辑:模拟对象库是python版本3.3中的新功能。对于较旧的python版本,请查看Michael Foord的版本
森含械
这是django的魔法特征之一 - 不要在文档中显示:)。但是这里提到了它。
裸雷胜檀哭
如果我需要,我还测试文件上传与测试客户端。 至于灯具,我只需在修改灯具中的路径后,将我需要的文件复制到测试文件夹中。 例如 在包含指向名为“audio”的目录的文件脚本的模型中,将“audio”:“audio / audio.wav”替换为“audio”:“audio / test / audio.wav”。 现在,您所要做的就是将测试文件夹和必要的文件复制到测试setUp中的“audio”中,然后在tearDown中将其删除。 不是我认为最干净的方式,但这就是我所做的。
感秆暴壳
然后它就可以使用了。