c++ - C++中对象状态的重构

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

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

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

其实我可以解决AUT源代码中声明的类型的问题。在这里,我可以使用 LLVM 在编译期间使用必要的代码检测类型。但是,我无法对 AUT 使用的预编译库中的引用类型执行此操作。

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

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

最佳答案

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

关于c++ - C++中对象状态的重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24466635/

相关文章:

c++ - 在使用 CMake 构建 Windows DLL 期间运行单元测试

c - 查找 C 代码中的错误的首选工具有哪些?

c++ - 无锁 C++ 数据结构,不可能吗?

c++ - 在链表运行时错误中插入节点

c# - 我如何对仅由 NHibernate 设置的 protected 属性进行单元测试?

matlab - 使用 MATLAB 的 Gitlab CI

适用于 Windows 的 C++ 动态代码分析工具

testing - 为什么动态分析不能覆盖一个程序的所有执行路径?

C++ 在派生类中更改成员类型

c++ - C++ 中的类和对象......需要一些额外的固定装置