pytest mock os.listdir для возврата пустого списка - PullRequest
0 голосов
/ 25 сентября 2018

В моей программе есть функция, которая выводит список всех файлов по заданному пути, и я пытаюсь написать тест, который проходит, если в указанном пути нет файлов (пустой вывод, т.е. []), который я изучаюнасчет крепежа pytest это сделать.Вот что я написал:

def test_no_dirs(mocker):
    mocker.patch('os.listdir')
    assert get_list() #get_list returns ['abc.json', 'test.json', 'test2.json']
    os.listdir.assert_called_with('/etc/app_data/',stdout=[])

Сначала я использовал mocker в качестве параметра, а затем исправил функцию os.listdir.os.listdir вызывается в get_list(), но я не знаю, как изменить return значение os.listdir на пустой список, [] - на пустую директорию.

Когда я запускаю вышеЯ получаю следующую ошибку:

E       AssertionError: Expected call: listdir('/etc/app_data/', stdout='[]')
E       Actual call: listdir('/etc/app_data/')
E
E       pytest introspection follows:
E
E       Kwargs:
E       assert {} == {'stdout': '[]'}
E         Right contains more items:
E         {'stdout': '[]'}
E         Full diff:
E         - {}
E         + {'stdout': '[]'}

Как я могу издеваться над os.listdir, чтобы вернуть пустое значение и пройти тест?

Если я уберу stdout=[], тест PASSно на самом деле я не делаю то, что хочу, то есть, когда нет файлов.

Это код для get_list()

import os
def get_list():
    return os.listdir('/etc/app_data/')

1 Ответ

0 голосов
/ 25 сентября 2018

Версия pytest-mock должна выглядеть примерно так:

def test_no_dirs(mocker):
    mock = mocker.patch('os.listdir', return_value=[])
    result = get_list()
    assert result == []  # because that's the `return_value` mocked
    mock.assert_called_once_with('/etc/app_data/')

Обратите внимание, что пользователи, которые делают from os import listdir, должны будут использовать другие пространства имен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...