Исправление pathlib и тестирование строки во время вызовов - PullRequest
0 голосов
/ 29 августа 2018

Я начал использовать 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 путь генерируется динамически и создается, если он не существует. Я могу выяснить, как сделать так, чтобы он вызывался произвольно, но моя проблема в том, что я не уверен, как захватить параметр self, переданный в Path.mkdir, чтобы проверить, что его строка пути была правильной. С os.path это было проще, потому что, насмехаясь над функцией mkdir, я мог просто утверждать, что она вызывается с правильной строкой. Есть идеи?

1 Ответ

0 голосов
/ 31 августа 2018

Я нашел отличное решение. Попытка смоделировать весь класс Path оказалась очень запутанной, особенно потому, что я хотел, чтобы класс path выполнял все нормальное поведение, за исключением изменения диска. Что я обнаружил, так это включив autospec, теперь я мог утверждать вызов, включая аргумент «скрытого» self, например:

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)

Теперь я могу легко утверждать, что был бы создан правильный каталог. Может быть способ смоделировать весь класс Path с помощью autospec и достичь аналогичного результата, но кажется более разумным исправлять метод, который мне не нужен, и при этом иметь возможность делать утверждения, не имея прямого доступа к экземпляру, который вызвал метод.

...