【发布时间】:2017-02-11 22:34:40
【问题描述】:
我写了一个小型服务器聊天,它做非常基本的事情,我想围绕它编写测试。不幸的是,我很迷茫。我需要一些帮助才能走上正轨。
我有一个名为 Server() 的类,它包含一个名为 bind_socket() 的方法。我想编写单元测试(最好使用pytest)来测试以下方法:
class Server(Threading.Thread):
""" Server side class
Instanciate a server in a thread.
"""
MAX_WAITING_CONNECTIONS = 10
def __init__(self, host='localhost', port=10000):
""" Constructor of the Server class.
Initialize the instance in a thread.
Args:
host (str): Host to which to connect (default=localhost)
port (int): Port on which to connect (default=10000)
"""
threading.Thread.__init__(self)
self.host = host
self.port = port
self.connections = []
self.running = True
def bind_socket(self, ip=socket.AF_INET, protocol=socket.SOCK_STREAM):
self.server_socket = socket.socket(ip, protocol)
self.server_socket.bind((self.host, self.port))
self.server_socket.listen(self.MAX_WAITING_CONNECTIONS)
self.connections.append(self.server_socket)
我想知道为这种方法编写测试的最佳方法是什么,因为它不返回任何内容。我应该模拟它并尝试返回 socket()、bind()、listen() 和 append() 的调用次数还是继续进行的错误方法?我对此很迷茫,我使用 pytest 和 unittest 进行了许多测试,观看会议和阅读文章,但我仍然没有任何工作。 一些解释和/或示例将不胜感激。
非常感谢
【问题讨论】:
-
你的类有两个职责:作为服务器和作为线程。这应该是一个警告信号。
-
@PeterWood,感谢您的评论,您选择了我的兴趣,您能否再明确一点您的想法?
标签: python unit-testing sockets mocking pytest