Mock os.remove в Python с помощью unittest.mock - PullRequest
0 голосов
/ 05 мая 2020

Как имитировать os.remove с unittest.mock?

Моя попытка (с использованием pytest)

def test_patch_remove():
    with patch("os.remove"):
        remove('foo')

дает ошибку

    remove('foo') E           FileNotFoundError: [Errno 2] No such file or directory: 'foo'

, что указывает на то, что удаление не было имитатором.

1 Ответ

1 голос
/ 06 мая 2020

У вас есть две возможности: либо вы имитируете модуль os и используете remove из модуля (test_remove1), либо вы делаете from os import remove и имитируете копию в своем собственном модуле (test_remove2) :

test_remove.py

import os
from os import remove
from mock import patch

def test_remove1():
    with patch('os.remove'):
        os.remove('foo')

def test_remove2():
    with patch('test_remove.remove'):
        remove('foo')

В реальном тесте импорт будет происходить в другом модуле, поэтому второй случай должен быть адаптирован для исправления этого модуля.

...