不经试验在常规机组试验中运行twisted反应堆

utwist的Python项目详细描述


如果测试需要反应堆,用twisted进行单元测试有点困难 去跑步。官方的方法是使用twisted自己的单元测试框架 试用版。它与unittest模块非常相似。如果你愿意 要使用另一个框架,或者如果您喜欢很好的ide集成,那么utwist 也许对你来说是对的。

注意,编写单元测试 不要执行IO。但是对于集成测试,可能还有一些单元测试, 你需要一个反应堆。

免责声明:utwist是一个相当棘手的问题。它可以工作,我定期在Linux上测试它, OSX和Windows,但未来的Twisted版本可能会破坏它。你已经 警告。希望twisted最终能提供更好的测试解决方案。

这个库是开源的,在mit许可下发布。

您可以使用pip install utwist安装它。它不需要 编译任何东西,所以不应该有任何意外。即使是在窗户上。

我们走吧!

fromutwistimportwith_reactor@with_reactordeftest_connect_with_tcp():point=TCP4ClientEndpoint(reactor,"google.com",80)d=point.connect(MyFactory())returnd

如果你用鼻子跑步,这完全符合你的期望。 它打开网络连接。测试将失败,因为 连接没有关闭。utwist检查反应堆 在测试结束时是干净的。

当然你不必用鼻子。它也同样有效 使用unittest,也可能使用大多数其他框架。

延迟返回值

如果测试函数返回延迟,则测试将 如果延迟解析为值或不成功,则成功 如果延迟的错误。

设置和拆卸

如果在同一个类中有一个名为twisted_setup()的函数 定义测试函数时,将调用此函数 在测试之前,但已经在反应堆的上下文中。注意 测试框架提供的常规设置功能将 也要执行,但不能在reactor上下文中执行。

因此,如果存在twisted\u teardown()则在 测试功能,即使测试失败。

设置超时

如果测试,包括Twisted设置和Twisted拆卸 超时内未完成,测试失败。超时默认值 到两分钟。超时持续时间为零将禁用超时。

要指定不同的超时,请将其(以秒为单位)传递给装饰器:

@with_reactor(timeout=10)deftest_quick():...

它是如何工作的

我不告诉你细节,但是当 第一个测试开始,并让它运行到结束(反应堆不能重新启动)。 它使用blockingCallFromThread()在反应堆内部运行测试方法。 除此之外,还有一些技巧可以检查反应堆是否干净,以及 如果不是的话。也有一个非常肮脏的黑客让信号工作,即使 反应器不在主线程中运行。

错误报告和其他贡献

此项目位于此处utwist github page

备选方案

如果您不介意在测试中使用精简版的unittest,也不介意运行 然后我强烈推荐使用特殊跑步器进行测试。它是 twisted提供的官方单元测试工具。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
通过signingReport运行安卓应用程序时发生java错误   java我需要实现hashCode()和equals()方法吗?   javascript Selenium Java从Pinterest下载图像   java Tomcat(嵌入式),无需重新启动即可进行更改   java检查每个if是否有匹配的endif   的java接口。我也是。罐子   mysql java。sql。SQLException:列索引超出范围,0<1。使用准备好的语句   如何在java中修改json字符串?   javascript智能手机的独特功能   web服务java。lang.NoSuchMethodError:javax。ws。rs.core。响应$Status$Family   sockets通过浏览器/URL与ServerSocket建立Java连接   JavaSpring数据自定义存储库和接口隔离原则   swing从不同的java类访问jdialog的一个实例   java如何根据发出的事件有条件地缓冲分组的可观察/流量?   用java将电子邮件正文导出为html文件   JavaSpring获取ServletContext并将其作为Bean提供   setter不做java中应该做的事情