我当时在做一个项目,遇到了以下问题
我在类中创建了一个方法来查找一些user并应用逻辑,如果返回一些意外的东西,它会抛出一个异常,否则将返回id为null或具有某个值的user对象
我为所有的测试用例编写了单元测试,现在在callee中,我忘记了为null id添加条件。
处理这类错误的最佳实践是什么?我应该用所有的测试用例来编写集成测试,还是集成测试应该只有愉快的路径?
其次,在集成测试中,使用嵌入式数据库而不是实际的数据库好吗?我在考虑使用嵌入式数据库进行集成测试,但是如何测试特定于供应商的查询,例如oracle中的rownum和mysql中的limit。在我的实际环境中,我们使用oracle和嵌入式数据库,我可以使用h2。我使用的是纯jdbc
谢谢
发布于 2017-02-14 11:08:44
对于特定于供应商的情况,我会这样做--因为Oracle中的rownum和MySQL中的limit都限制了返回的行数,所以我会在自己这一侧创建一个抽象,比如myLimit。根据供应商DB的选择,它映射到rownum或limit。
一旦你有了上述内容,以及涵盖应用所有方面的任何其他必要的抽象,你就可以开始设计集成测试了。我推荐的首选是:(i)实际DB连接,(ii)嵌入式DB,和(iii)模拟DB,适用于所有供应商。数据库本身并不是很庞大。
基于QA指标,如果您觉得DB连接已经通过其他测试进行了彻底的测试,那么我会在集成测试中使用嵌入式或模拟DB。
正如您所看到的,答案取决于系统其余部分的测试情况!祝好运。
发布于 2017-02-14 17:00:18
关于单元和集成测试的。
让我们来弄清楚这些类型的测试之间的区别。
单元测试应该覆盖单元,这意味着我们覆盖了一小段代码。因此,单元测试通常涵盖非常特定的情况,并且通常有很多单元测试,因为对于一个小方法,程序可能有几个方向,并且所有方向都应该涵盖。所有干扰单元测试的东西,例如,一些调用外部方并且与方法的业务逻辑不相关的方法,都必须被模拟。
相反,在集成测试中,不建议模拟任何东西,因为您希望从根本上测试整个管道,这意味着您的测试应该通过不同的模块(类),而不模拟任何东西。这种类型的测试通常是相当大的,因此,我建议而不是在集成测试中处理一些小的验证检查,因为从我的角度来看,这样做是不值得的。
如果我从我的角度正确理解了您的情况,那么您的方法应该检查null,而不是调用者。它基于这样一个事实,即您永远不知道谁将调用您的方法。您的方法应该预期输入参数中允许的所有不同值。
https://stackoverflow.com/questions/42216888
复制相似问题