Почему мой макет патча API не работает на Python?

#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%