如何测试调用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 次调用中引发异常