首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于模拟外部的问题

关于模拟外部的问题
EN

Software Engineering用户
提问于 2014-08-13 11:37:26
回答 1查看 110关注 0票数 1

在公司,我们正在开发一个相当大的项目,我们正在争论测试策略。问题是:所有的测试是否应该孤立地执行,比如数据库或API (facebook等),或者仅仅是其中的一部分?当然,我的想法是使用模型。我们讨论了以下策略:

  1. 编写所有独立于外部服务的测试--到处都是模拟外部
  2. 单独编写部分测试,并为每个使用外部(不模拟任何东西)测试的特性创建单个更大的功能测试--使用固定装置
  3. 运行与外部通信的所有测试(当然,这永远不能应用于单元测试,因此在这种情况下它们超出了范围)

我知道它可以开始一个相当大的讨论,但我认为这就是它的全部,我想找到的利弊,我还没有想到。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2014-08-13 12:22:30

如果做得好,第二种策略可以兼得两种策略的优点:

独立编写部分测试

将大多数测试与外部服务隔离是一个好主意,因为您无法控制该服务。最坏的情况是单元测试断断续续地失败,因为最终您将开始忽略故障,此时测试是无用的。创建一个模拟,为您的测试提供一致的响应,可以更容易地验证您的代码如何响应外部服务的给定响应。

为使用外部环境测试它的每个功能创建单个更大的功能测试

这可以提供更接近实际操作条件的系统行为的重要洞察力,使您能够识别和处理与模拟外部服务(如网络问题、输入或输出数据格式错误)时所遇到的不同问题。

  1. 有时,您不知道外部源在某些情况下会如何反应,很难模拟它(例如,使用复杂查询的Solr )。
  2. 有时,您可以忘记特定于软件的情况(例如,在使用ORM时,从MySQL切换到Postgres,可能会返回不同的结果并导致其他一些问题)。

如果您可以可靠地再现来自外部服务的一些响应,并且您想要验证您的代码是否以某种方式对它作出反应,那么测试它是有意义的。重要的是,您不允许在测试中出现间歇性的失败,例如,在每个构建中运行。我见过非常优秀的开发人员关闭测试,因为需要进行构建,而且他们没有时间修复一个晦涩复杂的测试。这是一个不好的情况,因为测试不再是他们的目的,对他们的信心降低了。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/253165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档