c++中对象状态的重构
Reconstruction of Object States in C++
我想在LLVM的帮助下在c++中采用自动单元测试生成方法。该方法应该在被测应用程序(AUT)的动态分析期间自动获取特定对象的状态。记录完数据后,我想编写测试。在这里,测试应该在执行测试中的方法/代码之前,用记录的测试数据重构对象作为设置。
对象状态是指对象的所有成员变量值,包括引用到其他对象(我也需要获取和重建整个对象状态)。但是,由于所有成员值都包含私有成员变量的值,因此我遇到了一个问题。据我所知,在c++中没有办法访问私有成员变量。也就是说,除非所讨论的对象类型是任何"我的对象类型"的友元,或者提供了对其私有成员的直接访问函数。
实际上,对于在AUT源代码中声明的类型,我可以解决这个问题。在这里,我可以使用LLVM在编译期间用必要的代码对类型进行检测。但是,对于AUT使用的预编译库中的引用类型,我不能这样做。
因此,我的问题是:你知道我如何记录和重建我没有源代码的任意对象的完整状态吗?直接复制内存会有帮助吗?
因为我的方法实际上是基本的(自动的)单元测试生成,我确信一定有办法在c++中实现它。毕竟,这类生成器已经在Java和c#中实现了。
c++不是为此而设计的,因为在基本语言中没有对象自省和序列化。当然,你可以自己实现它,但也许你应该使用一个可以帮助你的框架,比如protobuf或Qt。主要的一点是这个将对您打算测试的代码有很大的影响。我建议使用另一种方法,也许编写代码在测试中实际设置对象状态,这样会少一些干扰。
相关文章:
- 如何重构类层次结构以避免菱形问题
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 试图在崇高中奔跑. 错误 已发生: 收集2.exe: 错误: ld 返回 1 退出状态
- 在容器上移动分配:以前包含的对象的状态
- collect2:错误:ld 返回 1 个退出状态未定义的引用
- c++中对象状态的重构