I wrote a custom HTTP Handler
class to process GET
requests sent to a local server. I would like to test the internal functioning of the do_GET
method. So far here is what I came up with. This only tests if the do_GET
method gets called, nothing more.
Class TestHandler(unittest.Testcase):
def setUp(self):
self.mock_request = Mock()
@patch('http.server.HTTPServer')
@patch('my_module.Handler.do_GET')
def test_do_get(self, mock_do_get, mock_http_server):
"""Test if do_GET method gets called"""
mock_do_get.return_value = "/"
self.mock_request.makefile.return_value = IO(b"GET /")
server = Handler(self.mock_request, ('127.0.0.1', 8080), mock_http_server)
self.assertTrue(mock_do_get.called)
self.assertEqual(server.do_GET(), "/")
Updated version
Now I know for a fact that the do_GET
method get's called when a GET
request is sent but I have no way to check the http response.
@patch('http.server.HTTPServer')
def test_do_get_monkey(self, mock_http_server):
self.mock_request.makefile.return_value = IO(b"GET /test")
handler = HttpHandler(self.mock_request, ('127.0.0.1', 8080), mock_http_server)
handler.do_GET = MagicMock(return_value="/")
handler.do_GET()
handler.do_GET.assert_called_with()