Aktualisieren Sie ein verspottetes Objekt in Python
Aug 20 2020
Ich habe ein verspottetes Objekt wie folgt erstellt:
with patch('requests.get') as request:
self.request = request
self.request.session = MockSession()
self.request.cookies = {}
Wie kann es durch eine andere Funktion aktualisiert werden?
Antworten
2 MrBeanBremen Aug 19 2020 at 23:16
Wenn Sie ein gepatchtes Objekt speichern möchten, müssen Sie das Patchen manuell starten und beenden. Wenn Sie den Kontextmanager verwenden (z. B. with patch), wird das Patchen beim Verlassen des Bereichs zurückgesetzt.
Folgendes können Sie tun:
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.')
Beachten Sie, dass ich den tatsächlichen Test nicht überprüft habe - dies hängt von Ihrer Anwendungslogik ab.
Sie können das Patchen auch direkt im Test durchführen:
@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.')