#python #unit-testing #mocking #python-module #python-mock
Вопрос:
Поэтому я пытаюсь протестировать поиск api с помощью моих фиктивных данных.
Я тестирую метод, в transform.py
котором импортируется поиск модуля
import lookup
col = lookup.ColFinder()
url = "xyz"
if col.is_present(url):
do this
lookup.py
import secdata
class ColFinder():
def is_present(url):
if url in secdata.CUSTOM_STUFF:
return secdata.CUSTOM_STUFF[url]
secdata.py
secdata.CUSTOM_STUFF=load("some_file")
Я хочу поиздеваться над JSON (файл, загружаемый внутри secdata.CUSTOM_STUFF
)
Я пытался издеваться, используя unittest.mock с некоторой пользовательской конфигурацией в тестах/ресурсах
CUSTOM_CONFIG = secdata.load(os.path.join(os.path.dirname(__file__),'/resources/custom_config.json'))
import mock
@mock.patch("transform.lookup.secdata.CUSTOM_STUFF" , return_value=CUSTOM_CONFIG)
def test_blah_blah(self, *_):
но это, похоже, не загружает файл, на который я пытаюсь ссылаться. Пожалуйста, кто-нибудь может помочь мне посмеяться над этим, указать, что я делаю не так.
Заранее спасибо.
Комментарии:
1. вам нужно смоделировать
ColFinder
и протестировать различные сценарии этого, но неsecdata
так, в этом случае вы бы протестировали логические ветвиis_present
2. @gold_cy Спасибо вам за ваш ответ. Да, я смог отдельно поиздеваться над значениями is_present, но я ищу способ, с помощью которого я могу просто поиздеваться над значением secdata в поиске вместо того, чтобы издеваться над ветвями
3. но это неправильный способ написания модульного теста, если вы хотите протестировать
secdata
, то протестируйте этот модуль самостоятельно. поскольку вы проводите тестированиеtransform.py
, вам не следует беспокоиться о том, что происходит вlookup.py
4. Я не хочу тестировать secdata, я просто хочу издеваться над всем файлом, так как я пишу несколько тестов, и не хочу издеваться над отдельным файлом. Я хочу сделать что-то вроде ( load_config ) один раз