用C ++重构对象状态

时间:2014-06-28 12:05:10

标签: c++ unit-testing dynamic-analysis object-state

我想在LLVM的帮助下在C ++中使用自动单元测试生成方法。该方法应在动态分析被测应用程序(AUT)期间自动获取特定对象的状态。记录数据后,我想写测试。在这里,测试应该在执行测试的方法/代码之前将记录的测试数据作为设置重建对象。

对象状态是指对象的所有成员变量值,包括     对其他对象的引用(我也需要获取和     重建整个对象状态)。但是,由于所有成员值都包含私有成员变量,因此遇到了问题。根据我的学习,无法在C ++中访问私有成员变量。也就是说,除非所讨论的对象类型是具有"我的对象类型"中的任何一个的朋友。或者为其私人成员提供直接访问功能。

实际上,我可以为已经在AUT的源代码中声明的类型解决这个问题。在这里,我可以使用LLVM在编译期间使用必要的代码来检测类型。但是,对于AUT使用的预编译库中的引用类型,我不能这样做。

因此,我的问题:您是否知道如何记录和重建我没有源代码的arbritrary对象的完整状态?可以直接复制内存吗?

由于我的方法实际上是基本(自动)单元测试生成,我确信必须有办法在C ++中实现它。毕竟,这种类型的生成器已经用Java和C#实现了。

1 个答案:

答案 0 :(得分:0)

C ++没有为此设计,因为基本语言中没有对象内省和序列化。 当然你可以自己实现,但也许你应该使用一个可以帮助你的框架,比如protobuf或Qt。 重点是对您要测试的代码产生重大影响。 我建议使用另一种方法,也许编写实际设置测试中对象状态的代码,它会更少侵入。