Pytest высмеивает импортированную функцию eval - PullRequest
0 голосов
/ 02 ноября 2018

Не уверен, что это вообще возможно, но есть ли способ высмеять импортированную функцию eval?

Например:

a.py

import b

def code():
    me = 'ME'
    should_be_changed = eval('b.mock' + me + '()')

    return should_be_changed

b.py

def mockME():
    return 'Dummy code'

test_a.py

import a
import pytest
from unittest.mock import patch

def test_code():
    #with patch('patch mockME somehow?', return_value='mocked code') as mock_mockME:
        assert_me = a.code()
    assert assert_me == 'mocked code'

1 Ответ

0 голосов
/ 02 ноября 2018

Использование приспособления monkeypatch:

# test_a.py

def test_code(monkeypatch):
    monkeypatch.setattr('b.mockME', lambda: 'mocked code')
    assert_me = a.code()
    assert assert_me == 'mocked code'
...