cập nhật một đối tượng bị chế nhạo trong python

Aug 20 2020

Tôi có một đối tượng chế nhạo được tạo như sau:

    with patch('requests.get') as request:
      self.request = request
      self.request.session = MockSession()
      self.request.cookies = {}

Làm thế nào nó có thể được cập nhật thông qua một chức năng khác

Trả lời

2 MrBeanBremen Aug 19 2020 at 23:16

Nếu bạn muốn lưu một đối tượng đã được vá, bạn phải bắt đầu và dừng vá theo cách thủ công. Nếu bạn sử dụng trình quản lý ngữ cảnh (ví dụ with patch), bản vá sẽ được hoàn nguyên khi thoát khỏi phạm vi.
Dưới đây là những gì bạn có thể làm:

class TestSomething(unittest.TestCase):
    def setUp(self):
      self.patcher = patch('requests.get')  # returns the patcher object
      self.request = self.patcher.start()  # returns the patched object
      self.request.session = MockSession()
      self.request.cookies = {}

    def tearDown(self):
        sef.patcher.stop()

    def test_03_set_nonce(self):
        self.web_session.set_nonce(self.request)
        self.assertTrue(len(self.request.cookies) > 0, 'set_nonce failed.')

Lưu ý rằng tôi đã không kiểm tra thử nghiệm thực tế - điều này phụ thuộc vào logic ứng dụng của bạn.

Bạn cũng có thể thực hiện vá trực tiếp trong thử nghiệm:

    @patch('requests.get')
    def test_03_set_nonce(self, request):
        request.session = MockSession()
        request.cookies = {}
        self.web_session.set_nonce(request)
        self.assertTrue(len(request.cookies) > 0, 'set_nonce failed.')