unit-testing - 在测试 API 的包装器时,我的单元测试是否应该直接接触 API?

标签 unit-testing tdd

我写了一些单元测试 测试围绕 FTP 服务器 API 的包装器。

单元测试和 FTP 服务器都在同一台机器上。

包装器 API 被部署到我们的平台,并用于远程和 Web 服务场景。包装器 API 本质上采用 XML 消息来执行诸如添加/删除/更新用户、更改密码、修改权限……之类的任务。

在单元测试中,假设将用户添加到虚拟域,我创建了要发送到 API 的 XML 消息。 API 完成它的工作并返回一个响应,其中包含有关操作是成功还是失败的状态信息(错误代码、验证失败等)。

为了验证 API 包装器代码是否确实做了正确的事情(如果响应表明成功),我调用了 FTP 服务器的 COM API 并直接查询其存储以查看,例如在创建用户帐户时,用户帐户是否真的做了被创造。

这味道难闻吗?

更新 1: @Jeremy/Nick:包装器是测试的重点,FTP 服务器及其 COM API 是 3rd 方产品,大概经过良好测试且稳定。包装器 API 必须解析 XML 消息,然后调用 FTP 服务器的 API。我将如何验证(这可能是一个愚蠢的情况)包装器正确设置了用户帐户的特定属性。例如,由于包装器代码中的拼写错误而设置了 FTP 帐户的错误属性或属性。一个很好的例子是设置上传和下载速度限制,这些可能会在包装器代码中被转换。

更新 2:谢谢大家的回答。对于建议使用模拟的人来说,我已经想到了,但是那里的灯还没有打开,我仍在努力弄清楚如何让我的包装器与 FTP 服务器的模拟一起工作.模拟将驻留在何处,我是否将所述模拟的实例传递给包装器 API 以使用而不是调用 COM API?我知道 mock 但我很难理解它,主要是因为我发现大多数示例和教程都非常抽象,并且(我很惭愧地说)几乎无法理解。

最佳答案

您似乎在混合单元和组件测试问题。

  • 如果您要对包装器进行单元测试,则应使用模拟 FTP 服务器并且不涉及实际服务器。好的一面是,您通常可以像这样实现 100% 的自动化。
  • 如果您正在对整个事情进行组件测试(包装器 + FTP 服务器一起工作),请尝试在与测试相同的级别验证您的结果,即通过您的包装器 API。例如,如果您发出上传文件的命令,接下来,发出删除/下载该文件的命令,以确保文件已正确上传。对于测试结果并非易事的更复杂的操作,请考虑使用您提到的 COM API“后门”,或者可能涉及一些手动验证(您的所有测试都需要自动化吗?)。
  • 关于unit-testing - 在测试 API 的包装器时,我的单元测试是否应该直接接触 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/213646/

    相关文章:

    ios - 如何模拟符合协议(protocol)并被 OCMock 模拟的对象的属性?

    c# - 无法 nunit 测试我的 log4net 包装类

    unit-testing - 如何使用 gtest_main 库和 Jam 构建 googletest 单元测试?

    java - Mockito 检查异常对此方法无效

    android - Jest testing::测试失败并且错误路由到\react-native-vector-icons

    java - 用于单元测试的 Cassandra 2.1 设置?

    php - 构建可伸缩(可扩展)、可维护和松耦合软件的最佳技术是什么?

    tdd - 在数据库而不是假存储库上运行测试是不好的做法吗?

    Java 代码覆盖率的想法?

    java - 在 Java 中测试 try-catch block