【问题标题】:Unit testing with serialization mock objects in C++在 C++ 中使用序列化模拟对象进行单元测试
【发布时间】:2026-01-22 16:05:02
【问题描述】:

您好,

我是 TDD 的新手,遇到了一个我不完全确定如何解决的单元测试。

基本上,我正在测试几个将二进制流读/写到文件的遗留类方法。类函数将一个可序列化的对象作为参数,它处理对文件的实际读/写。

为了测试这个,我想我需要一个序列化模拟对象,我会传递给这个函数。我最初的想法是让模拟对象保持在 (char*) 上,它会动态分配内存并 memcpy 数据。但是,看起来模拟对象可能做了太多工作,并且可能超出了此特定测试的范围。

我最初的方法是否正确,或者任何人都可以想到另一种正确测试它的方法?

谢谢!

【问题讨论】:

    标签: c++ testing serialization tdd mocking


    【解决方案1】:

    我相信对此会有一些分歧,但我觉得模拟对象是一个高级主题。在深入模拟之前,我会对无模拟 TDD 感到满意。也就是说,有很多问题最好用模拟来解决。在这种情况下,您的模拟实际上不需要做任何事情,只需记录调用函数已调用它们即可。在单独的测试中测试实际的读取器和写入器。你的直觉认为你的模拟做了太多的工作是正确的。

    【讨论】:

      【解决方案2】:

      只需使用 std::ostringstream,您就不必管理 char*。

      此外,由于您似乎正在测试可序列化对象的客户端,因此该对象实际上不必序列化。您应该确保使用正确的参数调用正确的函数。您很可能不需要任何 char* 或类似的东西。

      【讨论】: