【问题标题】:Why my API mock patch is not working on Python?为什么我的 API 模拟补丁不适用于 Python?
【发布时间】:2020-08-07 16:57:51
【问题描述】:

我是单元测试和模拟的新手。我有一个脚本get_table.py 和一个函数

def get_table_name(id):
    url = "https://some_api" + id
    table = requests.get(url)
    return table
 

然后我创建了一个单元测试脚本如下:

from get_table import get_table_name
from unittest.mock import patch 

class TestFetchTable(unittest.TestCase):
    @patch('get_table.get_table_name')
    def test_get_table_name(self,mock):
        mock.return_value = 'table_1'
        result = get_table_name('id1')
        self.assertEquals(result, 'table_1')

if __name__== '__main__':
    unittest.main()

单元测试在这里通过了,但测试仍然运行在实际的 API 上,而不是模拟的 API。我可以知道我在这里做错了吗?

【问题讨论】:

  • 你好,有趣,也许导入基本模块import get_table,不确定...
  • 尝试使用import get_table 并改为调用get_table.get_table_name,因为这是您已修补的内容。检查where to patch

标签: python api unit-testing patch


【解决方案1】:

您应该模拟requests.get 方法。

例如

get_table.py:

import requests


def get_table_name(id):
    url = "https://some_api" + id
    table = requests.get(url)
    return table

test_get_table.py:

from get_table import get_table_name
from unittest.mock import patch
import unittest


class TestFetchTable(unittest.TestCase):
    @patch('get_table.requests')
    def test_get_table_name(self, mock_requests):
        mock_requests.get.return_value = 'table_1'
        result = get_table_name('id1')
        self.assertEqual(result, 'table_1')


if __name__ == '__main__':
    unittest.main()

带有覆盖率报告的单元测试结果:

.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK
Name                                           Stmts   Miss  Cover   Missing
----------------------------------------------------------------------------
src/stackoverflow/63306217/get_table.py            5      0   100%
src/stackoverflow/63306217/test_get_table.py      10      0   100%
----------------------------------------------------------------------------
TOTAL                                             15      0   100%

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2023-01-03
    • 1970-01-01
    • 2022-10-05
    • 2020-06-22
    相关资源
    最近更新 更多