å¤é¨API使ç¨ã§ãå®å¿ãã¦ã³ã¼ããããããã®ãmock ãã¤ãã£ããã¹ã
Twitter ã Facebook ã«éãããå¤é¨APIãå©ããªããã°ãªããªãå ´é¢ã¯åºã¦ããããã ã§ãããã¹ãã³ã¼ããããªãã¨ä¸å®ã«ãªãã®ã«ãå¤é¨APIã®æåã«ãããã¦ãã¾ã飿ºããªãã¨ãããªãã±ã¼ã¹ã§ãã¹ãã³ã¼ãããããªãã®ã¯ããªãããããããããã¨ããmock ã使ããã
Mock - Mocking and Testing Library — Mock 1.0.1 documentation
requests と mock を使ってみる - Twisted Mind
python の mock ライブラリを使ってみる: Addicted To Indentation
ã¤ãã
ãã¹ãã³ã¼ãã¨ããã¹ãã±ã¼ã¹ã®è©±ã«ãªãã¨ã¢ãã«ã³ãé£ãã§ããããªã®ã§*1ããããã£ããããçè§£ã§æ¸ãã¦ããã
from mock import Mock # ã¢ãã¯ãã¤ãã m = Mock() # m ãå¼ã³åºãã¨å¿ ã "hogemoge" ãããã£ã¦ããããã«ãã m.return_value = "hogemoge" # ãã¹ããã assert m == "hogemoge"
å®éãã¹ãã³ã¼ãã®è¨è¿°ã¯ unittest ã Django ã® unittestããã¹ãã©ã³ãã¼ã¨ãã¦ã¯ nose ãªã pytest ãªã Django test ã³ãã³ãã§èµ°ããããããã
ããã¡ãã£ã¨ä½¿ã
èªåãå®è£ ãã¦ãã颿°ã§ã¯ãªããå¤é¨ã©ã¤ãã©ãªã«ä¾åãã¦ããå ´åãããã®æåãå·®ãæ¿ãã
from mock import patch import some_method # context_manager ã§å¼ã³åºã import mymodule with patch("mymodule.coooooool_script") as m: m.return_value = "it's cool" self.assertEqual(some_method(), m) # ãã³ã¬ã¼ã¿ã§å¼ã³åºã class Tests(TestCase): @patch(return_value="it's cool") def coooooooool_script_vaild(self, m): self.assertEqual(some_method(), m) # ä¾å¤ãèµ·ãããã def coooooooool_script_vaild_valid(self) with patch("mymodule.coooooool_script") as m: m.side_effect = CoooolError() with assertRaises(CoooolError): some_method() # ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãããæ¸ãæããã # ãªã®ã§ã¯ã©ã¹ãã¢ãã¯ã«ããå¿ è¦ããã import MyCoooooolClass patch('MyCoooooolClass') def coooooooool_script_vaild_valid_valid(self, mock_class): with patch("mycoooooolclass.coooooool_script") as m: instance = mock_class.return_value instance.soooomeeeeeeeethod.return_value = "hai" self.assertEqual(instance.soooomeeeeeeeethod, "hai")
ããããè¨è¿°æ¹æ³ãã¤ããããããããã¯ãã¹ãã³ã¼ãèªä½ã«çåãããããããããã©ãåèè³æã¿ãªãããããªæãã§ããã¦ããããã£ã¨ãããããããããã¨ããããã
ã¾ã
ããããã¢ãã¯ä¾¿å©ã§ãªãã§ãã§ãããã©ã¢ãã¯è·äººã«ãªã£ããããã¯ããã§èããã»ãããããã¨ããã®ããããããã¹ãããããè¨è¨ã ããã ãªã¼ã
*1:ææèªä½ã¯åããããã©ãåç½®ããã¦ãããªãã¨ã¡ãã£ã¨ããã