Я новичок в pytest, я хочу создать тест для метода, вызываемого внутри библиотеки. Итак, ниже приведен мой пример использования.
У меня есть библиотека Python под названием core:
def get_timestamp(input_example):
# I have an import statement in this file that is, import time
timestamp = time.time()
return f'{input_example}-{timestamp}'
Итак, я хочу издеваться над time.time(), потому что каждый раз я не хочу получать другую отметку времени.
Ниже приведен мой код pytest
import time
from core.p_core.common import CommonBase
def test_get_timestamp(mocker):
mock_now = mocker.patch("core.p_core.common.CommonBase.time.time",
return_value=1680087494.2400253)
assert CommonBase.get_timestamp('TEST') == "TEST1680087494.2400253"
Но я получаю сообщение об ошибке ModuleNotFoundError: нет модуля с именем core.p_core.common.CommonBase.
Пожалуйста, игнорируйте мою логику методов get_timestamp, это всего лишь пример.
Спасибо.
@ Джерри Спасибо. Да, даже я не знаю, почему я получаю этот ModuleNotFoundError. Кроме того, я удалил этот оператор возврата. При импорте этого модуля я не получаю никаких ошибок.
вам нужно исправить импорт в APISearchBase
, в зависимости от того, какой файл определен в
@gold_cy спасибо. Не могли бы вы привести пример? Потому что я новичок в pytest, и я не понял, что вы имеете в виду, извините.
каков путь импорта APISearchBase?
@gold_cy Извините, это была ошибка, на самом деле это не APISearchBase, а CommonBase. Я обновил вопрос.
В операторе импорта я не получаю никаких ошибок. Но при добавлении его в патч я получаю сообщение об ошибке ModuleNotFoundError: No module named 'core.p_core.common.CommonBase'; 'core.p_core' не является пакетом
Проблема решается путем обновления метода test_get_timestamp следующим образом.
def test_get_timestamp(mocker):
mock_now = mocker.patch("core.p_core.common.time.time",
return_value=1680087494.2400253)
assert CommonBase.get_timestamp('TEST') == "TEST1680087494.2400253"
mock_now = mocker.patch("core.p_core.common.time.time", return_value=1680087494.2400253) Это было изменение. До того, как я пропатчил core.p_core.common.CommonBase.time.time. Но если нам нужно имитировать метод (в моем примере time.time()), который импортируется в common.py (common.py — это файл в приведенном выше примере), то я должен передать этот core.p_core.common. time.time для mocker.patch
Ничто не выглядит таким странным из вашего примера. Проверьте свой путь, вы должны запускать
pytest
из корневой папки, где у вас естьcore
модуль. Кроме того, вам не нужно снова устанавливать возвращаемое значение. нижняя строка может быть удалена.python mock_now.return_value = time.time()