如何测试调用socket.send时是不是引发异常[重复]

Posted

技术标签:

【中文标题】如何测试调用socket.send时是不是引发异常[重复]【英文标题】:How to test if exception is raised when calling socket.send [duplicate]如何测试调用socket.send时是否引发异常[重复] 【发布时间】:2015-07-27 18:43:55 【问题描述】:

这是我第一次使用模拟测试套接字接口。我有一个调用_socket.sendto() 方法的类。我想测试是否引发异常。

class socketUDP(object):

    def __init__(self, host="127.0.0.1", port=2003):
        self.host = host
        self.port = port

        self._socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)


    def send(self, metric, value):

        message = "%s %f\n" % (metric, value)

        try:
            self._socket.sendto(
                message, (self.host, self.port))
        except Exception, e:
            # I would like to test if this exception is raised
            print "Could not relay data: %s" % e

更新: 我正在为 send 方法编写一些单元测试,我想做的测试之一是查看是否引发了异常

【问题讨论】:

"Test" 就像您正在为send 方法编写测试一样,或者您正在尝试找出在send 中是否抛出异常的"test"?为什么你仍然在方法中发现错误? 我正在为 send 方法编写一些单元测试,我想做的测试之一是查看是否引发了异常。 【参考方案1】:

如果send() 方法捕获到异常,这将是相当困难的。您可以尝试monkey-patching the socket.send() method,但这充其量只是一个不确定的解决方案。在我看来,在这种情况下,您是在测试实现细节而不是对接口的一致性,这是一个值得怀疑的策略。

如果send()方法没有捕捉到异常,可以直接使用assertRaises()

【讨论】:

以上是关于如何测试调用socket.send时是不是引发异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何测试我的代码是不是引发了适当的 argparse 异常?

如何使用 Mockery 在模拟方法的第 N 次调用中引发异常

非阻塞方式socket send()返回大小和实际发送大小不一致

C#调用matlab时,类型初始值设定项引发异常

模拟函数以引发异常以测试除块

如何在对引发异常的 C# webmethod 的 ajax 调用上指定消息?