使用C ++中的序列化模拟对象进行单元测试

时间:2010-03-29 21:30:48

标签: c++ testing serialization tdd mocking

问候,

我对TDD很新,并且遇到了一个我不太确定如何解决的单元测试。

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

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

我的初步方法是否正确,或者有人能想到另一种正确测试方法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我确信会有一些不同意见,但我觉得模拟对象是一个高级主题。在潜入模拟之前,我会对无模拟的TDD感到满意。也就是说,有很多问题最好通过模拟来解决。在这种情况下,你的mock不需要做任何事情,只记录调用函数调用它们。在单独的测试中测试实际的读写器。你的模拟做太多工作的直觉是正确的。

答案 1 :(得分:0)

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

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