Как мне реализовать модульный тест Python для метода, который принимает filepath в качестве аргумента? - PullRequest
0 голосов
/ 28 июня 2019
class A:
    def read_json(self,file_json_path):
        try:
            with open(file_json_path) as fd:
                content = json.dumps(fd)
         except IOError:
            print 'exception while opening a file %s\n'%(file_json_path)

Я новичок в python. Может кто-нибудь подсказать мне, как посмеяться над открытием файла и прочитать данные json.

1 Ответ

0 голосов
/ 28 июня 2019

Вы захотите посмотреть mock_open из модуля mock. Он позволяет вам исправить встроенный метод open, чтобы имитировать чтение / запись.

Если есть эта функция (заметьте, я немного изменил вашу функцию):

def read_json(file_json_path):
    try:
        with open(file_json_path) as fd:
            content = json.load(fd)
            return content
    except IOError:
        print('exception while opening a file %s\n' % (file_json_path))

Вы можете легко протестировать функцию, например, так:

def test_read_json():
    from unittest.mock import mock_open, patch

    m = mock_open(read_data = '{"key": "value"}')
    with patch('__main__.open', m):
        result = read_json('fake_file')
        assert result == {'key': 'value'}
    m.assert_called_once_with('fake_file')

...