19

我正在为作为 HTTP 服务器运行的应用程序的一部分编写单元测试。我一直尝试采用的方法是导入包含 HTTP 服务器的模块,启动它。然后,单元测试将使用 urllib2 进行连接、发送数据并检查响应。

我们的 HTTP 服务器正在使用 Twisted。这里的一个问题是我对 Twisted 不太熟悉 :)

现在,我实例化我们的 HTTP 服务器并在 setUp() 方法中启动它,然后在 tearDown() 方法中停止它。

问题是,Twisted 似乎不喜欢这样,它只会运行一个单元测试。在第一个之后,反应堆将不再启动。

我一直在搜索和搜索,但我似乎无法找到一个有意义的答案。

我是完全采取了错误的方法,还是只是遗漏了一些明显的东西?

4

4 回答 4

18

这里有一些信息:使用 Trial 为 Twisted 代码编写测试

您还应该查看试用命令的 -help。有很多好东西在试用!但是在异步应用程序中进行测试并不总是那么容易。祝你好运!

于 2009-10-16T01:12:36.513 回答
7

我相信,对于 Twisted 中的单元测试,您应该使用TwistedTrial(它是一个核心组件,即随 Twisted tarball 在 twisted/trial 目录中提供)。但是,正如我所指出的 URL 所说,该文档主要是通过查看源代码(包括各种 Twisted 项目的源代码,因为它们也经过了 Trial 测试)。

于 2009-10-16T01:09:02.527 回答
4

正如其他人提到的,您应该在 Twisted 中使用 Trial 进行单元测试。

您还应该自下而上进行单元测试——这就是单元测试中的“单元”所暗示的。在测试界面之前测试您的数据和逻辑。对于 HTTP 接口,您应该使用模拟请求调用 processGET、processPOST 等,但只有在测试了这些方法调用的内容之后才应该这样做。每个测试都应该假设在别处测试的单元按设计工作。

如果您使用的是 HTTP,或者您需要一个正在运行的服务器或其他状态,那么您可能正在进行更高级别的测试,例如功能或集成测试。这不是一件坏事,但您可能想重新表述您的问题。

于 2009-10-16T22:45:23.773 回答
3

Twisted有一个已知错误(可能无法修复),重新启动反应堆会导致崩溃。

这就是为什么您的单元测试不起作用的原因。

除了使用试用版之外,您可能还需要考虑像客户端一样与您的 HTTP 服务器通信的单独测试系统。

  • Webdriver - 一种 A​​PI,用于在您的站点周围驱动浏览器会话。
  • TestGen4Web - 记录与站点交互并可以回放的 Firefox 插件。
于 2009-10-16T01:30:33.950 回答