用pytest编写单元测试来测试套接字

时间:2017-02-11 22:34:41

标签: python unit-testing sockets mocking pytest

我写了一个小的服务器聊天,它做了非常基本的事情,我想围绕它编写测试。不幸的是我很遗憾。我需要一些帮助才能找到正确的轨道。

我有一个名为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,观看会议和阅读文章,我仍然没有任何工作。 一些解释和/或例子将不胜感激。

非常感谢

1 个答案:

答案 0 :(得分:0)

对于bind_socket的每一行,您应该问自己一些问题:

  • 如果这条线不存在怎么办
  • (对于条件......我知道你这里没有任何条件)如果这种情况相反怎么办?
  • 此行可以引发异常。

您希望您的测试涵盖所有这些可能性。

例如,如果socket.bind已经绑定,socket.listen可以引发异常,或者{{1}}可以引发异常。之后关闭插座吗?