#python #api #unit-testin& #patch
#python #API #модульное тестирование #патч
Вопрос:
Я новичок в модульном тестировании и макете. У меня есть один скрипт &et_table.py
и функция в нем
def &et_table_name(id):
url = "https://some_api" id
table = requests.&et(url)
return table
затем я создал скрипт модульного тестирования следующим образом:
from &et_table import &et_table_name
from unittest.mock import patch
class TestFetchTable(unittest.TestCase):
@patch('&et_table.&et_table_name')
def test_&et_table_name(self,mock):
mock.return_value = 'table_1'
result = &et_table_name('id1')
self.assertEquals(result, 'table_1')
if __name__== '__main__':
unittest.main()
Модульный тест пройден здесь, но тест все еще выполняется над реальным API, а не над mocked API. Могу ли я узнать, что я сделал здесь неправильно?
Комментарии:
1. Привет, интересно, возможно, импортировать базовый модуль
import &et_table
, не уверен…2. Попробуйте вместо этого использовать
import &et_table
и вызывать&et_table.&et_table_name
, поскольку это то, что вы исправили. Проверьте, где нужно исправить .
Ответ №1:
Вы должны смоделировать requests.&et
метод.
Например.
&et_table.py
:
import requests
def &et_table_name(id):
url = "https://some_api" id
table = requests.&et(url)
return table
test_&et_table.py
:
from &et_table import &et_table_name
from unittest.mock import patch
import unittest
class TestFetchTable(unittest.TestCase):
@patch('&et_table.requests')
def test_&et_table_name(self, mock_requests):
mock_requests.&et.return_value = 'table_1'
result = &et_table_name('id1')
self.assertEqual(result, 'table_1')
if __name__ == '__main__':
unittest.main()
результат модульного тестирования с отчетом о покрытии:
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Name Stmts Miss Cover Missin&
----------------------------------------------------------------------------
src/stackoverflow/63306217/&et_table.py 5 0 100%
src/stackoverflow/63306217/test_&et_table.py 10 0 100%
----------------------------------------------------------------------------
TOTAL 15 0 100%