【问题标题】:Integration test best practise集成测试最佳实践
【发布时间】:2017-02-14 02:33:03
【问题描述】:

我正在做一个项目并遇到以下问题

我在类中创建了一个方法来查找一些用户并应用逻辑,如果返回了一些意外的东西,它会抛出一个异常,否则用户对象要么是 id 为 null 要么是一些值

我为所有测试用例编写了单元测试,现在在被调用者中我忘记为 null id 添加条件。

处理此类错误的最佳做法是什么。我应该用所有测试用例编写集成测试还是集成测试应该只有快乐的路径?

其次,在集成测试中,使用嵌入式数据库而不是实际的数据库好不好?我正在考虑使用嵌入式数据库进行集成测试,但是如何测试供应商特定的查询,例如 oracle 中的 rownum 和 mysql 中的限制。在我的实际环境中,我们使用的是 oracle 和嵌入式数据库,我可以使用 h2。我正在使用普通的 jdbc

谢谢

【问题讨论】:

  • 作为一般准则,任何测试(单元或集成)都应测试所有返回类型及其值范围。集成测试将模拟生产代码的所有方面。它可以用模拟对象代替实际对象。有关详细信息,请参阅此link。从第二句开始的最后一段不清楚你的意思,也许澄清一下?
  • 谢谢namerakes ..我编辑了问题的第二部分

标签: java spring junit integration-testing


【解决方案1】:

这是针对特定供应商的情况我会做的——因为 Oracle 中的 rownum 和 MySQL 中的 limit 都限制了返回的行数,所以我会在我这边创建一个抽象,比如 myLimit。根据供应商数据库的选择,它映射到rownumlimit

一旦您掌握了上述内容以及涵盖应用所有方面的任何其他必要抽象,您就可以开始设计集成测试了。我推荐的偏好是:(i) 实际数据库连接,(ii) 嵌入式数据库,和 (iii) 模拟数据库,适用于所有供应商。数据库本身不必很大。

基于 QA 指标,如果您认为数据库连接已被其他测试彻底测试,那么我会在集成测试中仅使用嵌入式或模拟数据库。

如您所见,答案取决于系统其余部分的测试情况!祝你好运。

【讨论】:

    【解决方案2】:

    关于单元和集成测试。

    让我们澄清一下这些测试类型之间的区别。

    单元测试应该是覆盖单元,这意味着我们覆盖了相当一小段代码。因此,单元测试通常涵盖非常具体的情况,并且通常有很多单元测试,因为对于一种小方法,程序可能有多个方向,并且应该涵盖所有方向。所有干扰单元测试的事情,例如,一些调用外部方并且与方法的业务逻辑没有真正相关的方法必须被模拟

    集成测试中,建议不要模拟任何东西,因为您基本上想测试整个管道,这意味着您的测试应该通过不同的模块(类)并且不要模拟任何东西。这种类型的测试通常非常庞大,因此,我建议不要在集成测试中处理一些小的验证检查,因为从我的角度来看,这样做不值得.

    如果我从我的角度正确理解你的情况,你的方法应该检查 null 而不是调用者。它基于这样一个事实,即您永远不知道谁会调用您的方法。 您的方法应该期望输入参数中允许的所有不同值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 2016-04-04
      • 2010-11-16
      • 2017-11-16
      • 2011-06-29
      • 2020-02-05
      • 1970-01-01
      相关资源
      最近更新 更多