7

我需要在我的 Delphi 应用程序中测试一些 HTTP 组件。我使用 DUnit 并希望在测试中添加一些自动化。

所以我的测试代码需要启动本地 HTTP 服务器,配置它(例如,准备在 3 秒内断开连接,或模拟低带宽,或要求登录/密码等),运行我的单元测试并关闭 HTTP服务器。

是否有一些 HTTP 服务器完全可用于 Delphi/DUnit?

我知道Mozilla团队有这样的服务器,但是将它集成到DUnit中并不容易。

4

4 回答 4

10

我使用 Indy'sTIdHttpServer在同一过程中提供服务。

这种方法允许我检查传入的请求是否正确,以及检查来自客户端的行为。

此外,您可以逐个测试用例单独设置服务器,使您的单元测试更容易理解(这意味着您在其他地方没有“测试”的一部分)。

于 2012-02-27T10:11:09.393 回答
1

虽然@Nat 的答案是可行的,但使用 Indy 存根请求及其相关响应的设置代码可能非常繁重。此外,当以这种方式工作时,我发现测试代码在编写和调试方面都非常耗费时间。因此,我为 DUnitX(对不起,不是 DUnit)构建了一个框架Delphi WebMocks,以使用 HTTP 术语应该直截了当的语法来做到这一点。

例如,设置代码很简单:

WebMock.StubRequest('GET', '/')
  .ToRespond
  .WithHeader('Content-Type', 'application/json')
  .WithBody('{ "value": 123 }');

您还可以验证实际发出的请求,例如:

WebMock.Assert
  .Post('/')
  .WithHeader('Content-Type', 'application/json')
  .WithBody('{ "value": 123 }')
  .WasRequested;

如果断言失败,则 DUnitX 测试将失败。

在如何指定请求匹配和响应方面还有很多内容,所以如果您认为它有用,请查看它。

于 2020-10-18T08:34:07.703 回答
0

您可以使用单元测试/DUnit 来构建自动集成测试。假设您作为 http 客户端的 HTTP 组件调用 Web 服务。您可以制作自己的模拟 Web 服务,或者只使用任何公共 Web 服务,例如来自 Google 或 Amazon 的服务之一。所以你只需要创建一个谷歌或者亚马逊的开发者账号,并消费一些基本的服务功能进行测试。

于 2012-02-27T10:39:19.850 回答
0

如果您正在测试 SOAP 服务,请使用 SoapUI 来建立基于您的 WSDL 的“模拟”服务。您可以让它返回各种响应(顺序地,或者使用一些简单的脚本来匹配对请求内容的响应。)我已经通过匹配我发送的请求中的“请求 ID”(只是一个 GUID)来做到这一点DUnit 测试,对 SoapUI 中的响应。这是一个简单的 xpath 查询来匹配它们。

您可以让它返回“罐头”错误/异常,当然,当它不运行时,您将拥有“没人在家”的测试用例。

于 2012-02-27T13:40:34.280 回答