如何编写使用两个不同数据库的应用程序的单元测试用例?

时间:2016-07-19 08:54:17

标签: unit-testing

我有一个使用两个不同数据库进行复制的应用程序。我想为这个应用程序编写测试用例。

我不能使用Mock框架,因为它没有使用接口。我们需要检查如果一个数据库表和应用程序中有记录运行,那么它应该将记录移动到其他数据库。我们还希望在执行后不应将值保存在数据库中。测试用例完成后应回滚操作。

1 个答案:

答案 0 :(得分:0)

从您如何表达问题的角度来看,您不清楚要执行的测试是单元测试还是集成测试。区别不在于是否隔离代码,而在于测试的目标是什么。

假设A:您的测试目标是测试自己代码的逻辑。对数据库的依赖很麻烦,您宁愿将代码与数据库隔离。但是,对数据库的访问不是通过接口(就编程语言构造而言),而是直接访问数据库API,甚至可能访问数据库的全局实例。而且,您无法更改代码。

根据您使用的编程语言和环境,可能还有其他方法可以用模拟,存根或其他任何方式替换数据库:例如,您不需要链接到原始数据库库。相反,您可以创建一个模拟的数据库库来链接(可以通过测试代码进行控制)(“链接器接缝”)。或者,您可以借助预处理器(在C或C ++中)将对db的调用替换为模拟的实现。

假设B:您的测试目标是确保代码与两个数据库之间的交互按预期进行。例如,您要确保元素确实从一个数据库转移到另一个数据库。

这将是一个集成测试方案,并且在这里模拟数据库不是有用的步骤,原因如下:如果您错误地假设了如何与数据库进行交互,则您创建的模拟只会再次反映您的错误的假设。

您在假设B下的问题更多是如何确保每个测试用例以干净状态启动和退出。从您提供的少量信息很难判断如何实现这一目标。您可以使用数据库备份来进行回滚等,但是这些选项在很大程度上取决于您的具体情况。