Python - Twisted与单元测试
我正在为一个作为HTTP服务器运行的应用程序写单元测试。我尝试的方法是导入包含HTTP服务器的模块,然后启动它。接着,单元测试会使用urllib2来连接、发送数据并检查响应。
我们的HTTP服务器是用Twisted框架搭建的。问题是,我对Twisted并不是很熟悉 :)
现在,我在setUp()方法中实例化我们的HTTP服务器并启动它,然后在tearDown()方法中停止它。
问题是,Twisted似乎不太喜欢这样做,它只会运行一个单元测试。在第一个测试之后,反应器就不再启动了。
我搜索了很多资料,但就是找不到一个让我明白的答案。
我这是完全走错了方向,还是只是漏掉了什么明显的东西呢?
4 个回答
正如其他人提到的,你在使用Twisted进行单元测试时应该使用Trial。
你还应该从底层开始进行单元测试,这就是“单元测试”这个词的意思。也就是说,先测试你的数据和逻辑,再去测试你的界面。对于HTTP接口,你应该用模拟请求来调用processGET、processPOST等方法,但这一步应该在你测试这些方法内部调用的内容之后进行。每个测试都应该假设其他地方测试过的单元都是正常工作的。
如果你在处理HTTP请求,或者需要一个正在运行的服务器或其他状态,那你可能是在进行更高级别的测试,比如功能测试或集成测试。这并不是坏事,但你可能需要重新考虑一下你的问题表述。
我认为在Twisted中进行单元测试时,应该使用TwistedTrial(这是一个核心组件,也就是说,它和Twisted一起打包在twisted/trial目录下)。不过,正如我提到的那个网址所说,文档主要是通过查看源代码来了解的(包括各种Twisted项目的源代码,因为它们也是用Trial进行测试的)。
这里有一些信息:使用Trial为Twisted代码编写测试
你还应该查看一下trial命令的-help选项。trial里面有很多有用的内容!不过在异步应用中进行测试并不总是那么简单。祝你好运!