我想在 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/