gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:18 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com