L'autre jour, j'ai été troublé par le simulacre de Python, alors je vais laisser un mémorandum.
[unittest.mock --- Bibliothèque d'objets simulés] (https://docs.python.org/ja/3/library/unittest.mock.html) [unittest.mock --- Introduction] (https://docs.python.org/ja/3/library/unittest.mock-examples.html)
Il était officiellement écrit que j'étais inquiet environ 2 heures. La formule est géniale
tori01.py
import requests
def get_qiita(url):
response = requests.get(url)
return response
Obtenez simplement l'URL et renvoyez la réponse renvoyée
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)
Vérification des assertions avec code d'état Cette fois sur la base de ces codes
Puisque requests
est importé dans tori01.py
Corrigé avec @ patch (" tori01.requests.get ")
S'il s'agit de tori01.py
et que requests.get
est importé
Il ne sera pas patché sauf si vous faites @ patch (" tori01.get ")
tori01.py
#Modifié par rapport aux demandes d'importation
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")Changer de
@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")Changer de
#La dénomination des arguments est également des requêtes.Passer des demandes d'accès aux demandes
@patch("tori01.requests")
def test_get_response(self, requests):
# requests_get.return_value.status_code =Changé de 200
requests.get.return_value.status_code = 200
res = tori01.get_response("mock.url")
self.assertEqual(res.status_code, 200)
Vous pouvez vérifier l'argument lorsqu'il est appelé.
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):
#Créez une fonction qui retourne mock pour pouvoir l'appeler.
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") #ajouter à
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_Si vous définissez une classe d'exception pour l'effet, une exception sera levée
requests_get.side_effect = requests.HTTPError
with self.assertRaises(requests.HTTPError):
tori01.get_response("mock.url")
Maquette magique ...
Recommended Posts