2011-10-11 35 views
4

如何編寫socketserver請求處理程序的單元測試?我曾嘗試使用下面的代碼,但也遇到一個問題:如何爲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

編輯:刪除了我最初發布的兩個錯誤之一,以簡化問題。

+0

可能你有另一臺服務器已經在該端口上運行? –

回答

2

它的工作對我來說(創建一個RequestHandler後)與:

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

這可能是一個錯誤的SocketServer shutdown它不叫server_close本身。

相關問題