【问题标题】:requests_mock fixture with unittest library?带有 unittest 库的 requests_mock 夹具?
【发布时间】:2020-02-01 13:36:26
【问题描述】:

我需要模拟 requests 库,因此想使用 requests_mock 库来实现这一点。虽然我想知道在使用 unittest 库时如何为我的测试类创建一个夹具?

我可以用testtools 做到这一点,例如:

import testtools
from requests_mock.contrib import fixture

class MyTestCase(testtools.TestCase):
    TEST_URL = 'http://some-not-existing-url.com'

    def setUp(self):
        super().setUp()
        self.requests_mock = self.useFixture(fixture.Fixture())
        self.requests_mock.post(self.TEST_URL, status_code='200')

    def test_01_method(self):
        resp = requests.post(self.TEST_URL)
        self.assertEqual('200', resp.status_code)

现在unittest 没有useFixture 方法。 unittest lib 中是否有一些等价物?或者我需要在那里使用一些不同的方法?

尝试类似的事情(没有useFixture,崩溃测试):

import unittest
from requests_mock.contrib import fixture

class MyTestCase(unittest.TestCase):
    TEST_URL = 'http://some-not-existing-url.com'

    def setUp(self):
        super().setUp()
        self.requests_mock = fixture.Fixture()
        self.requests_mock.post(self.TEST_URL, status_code='200')

    def test_01_method(self):
        resp = requests.post(self.TEST_URL)
        self.assertEqual('200', resp.status_code)

使用unittest 运行,我得到[Errno -2] Name or service not known,这清楚地表明模拟不能正确应用。

附:我需要unittest lib,因为它在我使用的框架中使用。所以我需要合并这些单元测试以与该框架保持一致。

【问题讨论】:

    标签: python unit-testing python-requests mocking fixtures


    【解决方案1】:

    您可以在setUp 中显式启动模拟并在tearDown 中停止它,而不是使用夹具。

    例如:

    import unittest
    import requests_mock
    import requests
    
    class MyTestCase(unittest.TestCase):
        TEST_URL = 'http://some-not-existing-url.com'
    
        def setUp(self):
            super().setUp()
            self.requests_mock = requests_mock.Mocker()
            self.requests_mock.post(self.TEST_URL, status_code='200')
            self.requests_mock.start()
    
        def test_01_method(self):
            resp = requests.post(self.TEST_URL)
            self.assertEqual('200', resp.status_code)
    
        def tearDown(self):
            super().tearDown()
            self.requests_mock.stop()
    

    【讨论】:

      猜你喜欢
      • 2011-02-09
      • 2012-02-24
      • 1970-01-01
      • 2018-01-31
      • 2011-04-18
      • 2015-05-03
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      相关资源
      最近更新 更多