我有一个现有的C/C++应用程序,它通过多个接口(TCP,DB,共享内存)与其他应用程序/系统进行通信。我想在真实环境下运行一次应用程序,然后“记录”所有函数调用及其返回值(或者更改缓冲区作为参数传递)。我只用“间谍”记录与外部接口(TCP,DB)有关的呼叫。然后我可以再次运行应用程序,但使用应该返回以前记录值的“假”功能。这样我就可以“重放”执行,并检查结果是否与原始执行相匹配。用于集成测试的模拟库
一个重要的功能是模拟时间函数(睡眠,时间,GetLocalTime),因为(例如)对数据库的调用可能在选择中具有当前日期或时间。能够比原始执行更快地“重放”所有的呼叫会更好(可以在几分钟内重播一天的执行)。例如,呼叫睡眠(1000)应该不等待就返回,但对GetLocalTime的连续调用应该返回1秒多。这应该考虑到其他线程在时间上应该具有一致的值(例如,库允许一个线程休眠1次调用(1000),另一个线程休眠10次调用(100))。
理想情况下,它不应该对应用程序进行很多更改或重构,只需重新定义对时间函数的调用以及对外部接口(DB,TCP)库的调用即可。
我想知道是否存在实现这些功能的库或框架,或者可能是一个好的起点。
我已经为类似的问题实现了几次解决方案,但对于非常简单的模块,例如嘲笑TCP连接来测试协议实现,但我觉得每次都重新发明轮子,而这些简单的解决方案不会缩放以及更多线程或更多接口的交互。
即使CMock似乎不具有记录和重放系统,我问一下,它的代码生成可以使我的生活更轻松。 – user2518618