Neulich war ich von Pythons Mock beunruhigt, deshalb werde ich ein Memorandum hinterlassen.
[unittest.mock --- Mock Object Library] (https://docs.python.org/ja/3/library/unittest.mock.html) [unittest.mock --- Einführung] (https://docs.python.org/ja/3/library/unittest.mock-examples.html)
Es wurde offiziell geschrieben, dass ich mir über 2 Stunden Sorgen machte. Die Formel ist großartig
tori01.py
import requests
def get_qiita(url):
response = requests.get(url)
return response
Holen Sie sich einfach mit URL und geben Sie die zurückgegebene Antwort zurück
test_tori01.py
import unittest
from mock import Mock, patch
import tori01
class TestTori01(unittest.TestCase):
@patch("tori01.requests.get")
def test_get_response(self, requests_get):
requests_get.return_value.status_code = 200
res = tori01.get_response("mock.url")
self.assertEqual(res.status_code, 200)
Assertionsprüfung mit Statuscode Diesmal basierend auf diesen Codes
Da Anfragen
in tori01.py
importiert wird
Gepatcht mit @ patch (" tori01.requests.get ")
Wenn dies "tori01.py" ist und "request.get" importiert wird Es wird nur gepatcht, wenn Sie "@ patch (" tori01.get ")" ausführen
tori01.py
#Von Importanforderungen geändert
from requests import get
def get_response(url):
response = get(url)
return response
test_tori01.py
import unittest
from mock import Mock, patch
import tori01
class TestTori01(unittest.TestCase):
# @patch("tori01.requests.get")Wechsel von
@patch("tori01.get")
def test_get_response(self, requests_get):
requests_get.return_value.status_code = 200
res = tori01.get_response("mock.url")
self.assertEqual(res.status_code, 200)
test_tori01.py
import unittest
from mock import Mock, patch
import tori01
class TestTori01(unittest.TestCase):
# @patch("tori01.requests.get")Wechsel von
#Die Benennung von Argumenten ist ebenfalls eine Anforderung.Wechseln Sie von get zu Anfragen
@patch("tori01.requests")
def test_get_response(self, requests):
# requests_get.return_value.status_code =Geändert von 200
requests.get.return_value.status_code = 200
res = tori01.get_response("mock.url")
self.assertEqual(res.status_code, 200)
Sie können das Argument überprüfen, wenn es aufgerufen wird.
test_tori01.py
import unittest
from mock import Mock, patch
import tori01
class TestTori01(unittest.TestCase):
@patch("tori01.requests.get")
def test_get_response(self, requests_get):
#Erstellen Sie eine Funktion, die mock zurückgibt, damit sie aufgerufen werden kann.
def requests_get_mock(url):
return Mock(status_code = 200, url = url)
requests_get.side_effect = requests_get_mock
res = tori01.get_response("mock.url")
self.assertEqual(res.status_code, 200)
self.assertEqual(res.url, "mock.url")
test_tori01.py
import unittest
from mock import Mock, patch
import tori01
class TestTori01(unittest.TestCase):
@patch("tori01.requests.get")
def test_get_response(self, requests_get):
requests_get.return_value.status_code = 200
res = tori01.get_response("mock.url")
self.assertEqual(res.status_code, 200)
requests_get.assert_called_with("mock.url") #hinzufügen
test_tori01.py
import unittest
from mock import Mock, patch
import tori01
class TestTori01(unittest.TestCase):
@patch("tori01.requests.get")
def test_get_response(self, requests_get):
vals = {"mock.url":200, "error_mock.url":404}
def requests_get_mock(val):
return Mock(status_code = vals[val])
requests_get.side_effect = requests_get_mock
res = tori01.get_response("mock.url")
res_error = tori01.get_response("error_mock.url")
self.assertEqual(res.status_code, 200)
self.assertEqual(res_error.status_code, 404)
test_tori01.py
import unittest
import requests
from mock import Mock, patch
import tori01
class TestTori01(unittest.TestCase):
@patch("tori01.requests.get")
def test_get_response(self, requests_get):
# side_Wenn Sie eine Ausnahmeklasse für den Effekt festlegen, wird eine Ausnahme ausgelöst
requests_get.side_effect = requests.HTTPError
with self.assertRaises(requests.HTTPError):
tori01.get_response("mock.url")
Magic Mock ...
Recommended Posts