Pytest: возврат значения в команде метода поддельного элемента - PullRequest
1 голос
/ 09 июля 2020

python 3.6

Я пытаюсь установить вывод имитируемого элемента в виде строки, но у меня возникают ошибки. Обычно идея состоит в том, что вы используете mock.return_value или mock.side_effect, но у меня это не работает:

Script

def main():
    config = Config(config_env) 
    print('the config ',config)
    table = config.get(config_key,"table")
    print(table)

Test

class TestMain:

    @patch('path.Config')
    def test_main_success(self, config_mock):
        main()

Когда я запустите тест, первый результат будет the config < MagicMock name='Config()' id='123123'> Отлично. Теперь я хочу, чтобы результат config.get(...) был строкой.

config_mock.return_value = 'my string'

не выполняется, потому что он преобразует значение config в строку, и вы не можете поместить .get на веревочке. Затем я пробую

config_mock.get.return_value = 'my string'

, но это тоже не удается. Результатом будет < MagicMock name='Config()' id='567567'>, который отличается от предыдущего идентификатора, но он должен был быть my string.

Какой правильный способ вернуть конкретный c вывод для config.get(...)

1 Ответ

0 голосов
/ 15 июля 2020

Дополняя hoefling комментарий, вы также можете использовать менеджер контекста и определять все свойства mock при его вызове.

def test_main_success(self):
    with patch('path.Config.get', return_value="my string")a as config_mock:
        main()
...