2

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

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

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

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

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

4

1 回答 1

0

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

于 2014-06-28T12:30:54.623 回答