小编Leo*_*nov的帖子

`requests_mock` 适用于所有请求,即使它们没有设置并抛出 NoMockAddress 异常

我发现requests_mock用作固定装置pytest适用于所有请求,即使它们没有设置。

我不确定这是一个requests_mock/pytest错误还是我遗漏了一些东西。最终,我不需要模拟“api-b”调用,但我不知道如何避免它。

def test_reqs(requests_mock):
    requests_mock.get('https://api-a.com/')
    requests.get('https://api-b.com/')
    assert requests.get('https://api-a.com/')
Run Code Online (Sandbox Code Playgroud)

我正在使用pytestrequests-mockpytest-mock作为 API 端点编写集成测试。在幕后,这个端点对我需要模拟的不同第三方 API 进行了多次调用。

其中一些调用可以被 嘲笑requests_mock。但其中一些不能,因为它们是从第三方模块内部进行调用的。

我尝试用pytest-mockmock最后一个发现它基本上不起作用。 requests_mock仍在尝试模拟该调用并抛出下一个错误: requests_mock.exceptions.NoMockAddress: No mock address: GET https://api-b.com/

python integration-testing pytest pytest-mock requests-mock

5
推荐指数
1
解决办法
3883
查看次数

使用mock_open模拟open函数

所以我想测试 Django 应用程序业务逻辑中的函数:

def parse_sectors_from_csv():
    sectors_csv = open(os.path.join(settings.BASE_DIR, 'sector', 'fixtures', 'sectors.csv'))
    sectors_csv_reader = csv.DictReader(sectors_csv)
    return [
        {
            'model': 'sector.sector',
            'id': index,
            'fields': {
                'name': row.get('Sector'),
                'slug': slugify(row['Sector']),
                'type_id': row.get('Type_Id')
            }
        }
        for index, row in enumerate(sectors_csv_reader, 1)
    ]
Run Code Online (Sandbox Code Playgroud)

我已经测试了它的文件存在性和标题行的存在性。

现在我想嘲笑

open(os.path.join(settings.BASE_DIR, 'sector', 'fixtures', 'sectors.csv'))
Run Code Online (Sandbox Code Playgroud)

在我的 test.py 中我写了

with patch('__builtin__.open', mock_open(read_data=sectors_csv_mock), create=True) as m:
        sectors = service.parse_sectors_from_csv()
        print('Sectors:', sectors)
        self.assertEqual(expected_sectors, sectors)
Run Code Online (Sandbox Code Playgroud)

但据我了解,它在打印时传递空文件来运行Sectors: []

我读了几遍mock_open dock,但仍然无法弄清楚。

>>> with patch('__main__.open', mock_open(read_data='bibble')) as m:
...     with open('foo') as h: # what's happening here? …
Run Code Online (Sandbox Code Playgroud)

python django unit-testing mocking python-2.7

1
推荐指数
1
解决办法
8677
查看次数