我有一个类,它使用舒蒂尔.rmtree若要删除某些文件(如果param被传递为true),如何模拟此行为,以便其他测试不中断需要这些文件的测试。在
我的班级看起来像这样-
class FileConverter(object):
def __init__(self, path_to_files):
self._path_to_files = path_to_files
def convert_files(self, rmv_src=False):
doStuff()
if rmv_src:
shutil.rmtree(self.__path_to_files)
def doStuff():
# does some stuff
现在我的测试看起来-
^{pr2}$现在,当我运行这个测试套件时,使用rmv的测试会给我assertionError
<MagicMock name='rmtree' id='139676276822984'> != [call('resources/images')]
第一个测试给了我文件找不到错误,因为mock不起作用,rmv源代码测试删除了这个文件
FileNotFoundError: [Errno 2] No such file or directory: 'resources/images'
如果我用rmv_source true注释掉第二个测试,那么我的第一个测试工作得很好。 我做错什么了?在
您的模块已经导入了
shutil.rmtree
,因此稍后在测试套件中对其进行模拟不会起任何作用。在您需要在导入
FileConverter
时模拟模块,而不是之后。在如果您仍然需要在测试代码中使用shutil,请首先使用别名导入它,并在需要“real”模块时使用该别名:
^{pr2}$除了
call(input_dir)
对我不起作用外,原来的帖子应该有用
^{pr2}$test_convert_with_rmv
无法删除input_dir
,它可能一开始就没有创建过。您可以在调用convert_files
前后的每个测试中断言此语句:相关问题 更多 >
编程相关推荐