c++中对象状态的重构

Reconstruction of Object States in C++

本文关键字:重构 状态 对象 c++      更新时间:2023-10-16

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

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

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

因此,我的问题是:你知道我如何记录和重建我没有源代码的任意对象的完整状态吗?直接复制内存会有帮助吗?

因为我的方法实际上是基本的(自动的)单元测试生成,我确信一定有办法在c++中实现它。毕竟,这类生成器已经在Java和c#中实现了。

c++不是为此而设计的,因为在基本语言中没有对象自省和序列化。当然,你可以自己实现它,但也许你应该使用一个可以帮助你的框架,比如protobuf或Qt。主要的一点是这个对您打算测试的代码有很大的影响。我建议使用另一种方法,也许编写代码在测试中实际设置对象状态,这样会少一些干扰。