我开始使用pathlib,并且真的很喜欢在大多数情况下使用它。由于方法而不是函数的性质,我遇到的问题是对其进行测试。
def test_correct_dir_was_made(self):
with patch('my.module.Path.mkdir') as mock_mkdir:
check_dirs()
mock_mkdir.assert_called_once()
在check_dirs
函数中,路径是动态生成的,如果不存在则创建。我可以弄清楚如何确保它被任意调用,但是我的问题是我不确定如何捕获传递到Path.mkdir的self参数来检查其路径字符串是否正确。使用os.path会更容易,因为模拟mkdir函数可以断言它是用正确的字符串调用的。有什么想法吗?
答案 0 :(得分:3)
我找到了一个不错的解决方案。试图模拟整个Path类非常麻烦,尤其是因为我希望path类执行所有正常行为,除了修改磁盘。我发现是通过启用autospec来实现的,现在我可以断言包含“隐藏”自变量的调用,如下所示:
def test_correct_dir_was_made(self):
with patch('my.module.Path.mkdir', autospec=True) as mock_mkdir:
check_dirs()
test_path = Path('path', 'to', 'test')
mock_mkdir.assert_called_once_with(test_path)
现在,我可以轻松地断言将创建正确的目录。可能有一种方法可以通过autospec模拟整个Path类并获得类似的结果,但是修补不需要的方法似乎更为理智,并且仍然能够在不直接访问所调用实例的情况下进行断言方法。