2

我开始使用 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 函数我可以简单地断言它是用正确的字符串调用的。有任何想法吗?

4

1 回答 1

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 类并获得类似的结果,但是修补我不想要的方法并且仍然能够在没有直接访问调用的实例的情况下进行断言似乎更明智方法。

于 2018-08-31T00:16:20.457 回答