#python #oop #testing #pytest
#python #ооп #тестирование #pytest
Вопрос:
Я не смог найти ответ, поэтому спрашиваю:
Допустим, у меня есть файл с этими функциями:
def method_1(param1, param2):
send_email(param1)
print('method_1 is done')
def method_2(param1, param2):
new_param = external_method(param1)
method_1(new_param['key'], param2)
print('method_2 is done')
Они являются частью некоторого фреймворка MVC, и я пытаюсь написать тест, поэтому изменение функций не является вариантом. Тест будет заключаться в том, чтобы проверить, является ли отправленное электронное письмо правильным.
external_method()
зависит от внешнего API, поэтому я не знаю, что он вернет, а это означает, что все, что я напишу, чтобы высмеять это, будет неточным для реальных настроек.
Все, что я знаю о external_method
результате, это то, что он должен быть в форме dict
и содержать вызываемый ключ 'key'
Не редактируя приведенный выше код, есть ли способ узнать, был ли send_email
inside method_1
вызван с правом param1
? Это означает, что электронное письмо содержит то, что я ожидаю от него, основываясь на происхождении param1
.
Я знаю, что мог бы использовать отладчик среды выполнения, но мне было интересно, есть ли другие решения.
Комментарии:
1. Встроенные библиотеки
unittest
иinspect
могут вам помочь.2. Какие параметры вы считаете правильными? Вы ищете покрытие кода? Ваш вопрос касается проверки того, была ли вызвана функция, была ли функция выполнена или были ли параметры правильными?
3. Сбор покрытия (стороннего) часто чрезвычайно эффективен с
unittest
4. @ti7 да, это были мои первые места, куда я заглянул
5. Извините, я этого не понимаю. Я бы посоветовал вам попробовать написать такой тест, и если у вас возникнут проблемы, вернитесь со своим тестовым кодом, чтобы мы могли помочь вам с конкретными проблемами. В любом случае, это хорошая идея сначала попробовать что-нибудь, чтобы получить представление о коде.
Ответ №1:
Я понял это:
Без редактирования приведенного выше кода, есть ли способ узнать, была ли вызвана send_email внутри method_1 с правильным параметром1?
Нет. Для этого требуется, чтобы мы могли проверять методы электронной почты; так что это другая область.