Как написать модульный тест для Python Обработчик запросов сокет-сервера?

Как мне написать модульные тесты для обработчика запросов socketserver? Я пробовал использовать следующий код, но обнаружил проблему:

import socketserver, unittest, threading

class TestServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    allow_reuse_address = True

class MyRequestHandlerTest(unittest.TestCase):
    def setUp(self):
        self.server = TestServer((HOST, PORT), MyRequestHandler)
        self.server_thread = threading.Thread(target=self.server.serve_forever)
        self.client = socket.create_connection((HOST, PORT))
        #self.server_thread.setDaemon(True)
        self.server_thread.start()

    def tearDown(self):
        self.client.close()
        self.server.shutdown()

Если я попытаюсь использовать несколько тестовых функций, таких как эта

    def test_foo(self):
        self.client.send(b'foo\n')
        result = self.client.recv(1024)
        self.assertEqual(b'FOO', result)

    def test_bar(self):
        self.client.send(b'bar\n')
        result = self.client.recv(1024)
        self.assertEqual(b'BAR', result)

, я получу ошибку

socket.error: [Errno 98] Address already in use

в строке self.server = ... , хотя я проинструктировал тестовый сервер на allow_reuse_address .

Edit: удалил одну из двух ошибок, которые я изначально опубликовал, чтобы упростить вопрос.

5
задан argentpepper 12 October 2011 в 20:55
поделиться