不经试验在常规机组试验中运行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第三方库


热门话题
java开始为Android开发应用程序   在哪种情况下,c++/c#namespace方法比Java方法更好?   java重构帮助。。。基于属性的对象还是大量成员字段?   java如何使用jackon json将嵌套对象作为字符串的对象转换为Pojo?   java是流式传输远程日志文件的有效方法   javajackson数据绑定:读入现有对象   java NullPointerException这是如何发生的?   java需要伪代码来进行文本压缩/解压缩   java JMS Websphere消息在发送时丢失   JUnit测试的Java SVNKit模拟单元测试   java Apache Crunch错误   java如何修复Android Studio/SQLite中的“空对象引用”错误?   java文件“navigation.json”在Android Studio项目中找不到   java如何在同一实体类上建立单向的一对一关系?   java调用web服务:javax。网ssl。SSLException:收到致命警报:协议\u版本   java与sql的连接   java Android:通过编程为透明背景图标(png)生成阴影,并在ImageButton中使用