【发布时间】:2011-01-11 09:47:08
【问题描述】:
我想为我的 C 库编写黑盒测试,该库使用标准 C 时间函数(time()、localtime()、gmtime() 等)在其输出中使用时间戳。输出是编码的,所以我需要用一些测试模拟或“后门”替换那些时间函数,这样我就可以控制我的库从 time() 函数而不是当前系统时间获得的值,这样我就可以在我的测试中正确编写检查。
实现这一目标的最佳方法是什么?我可以在生产库中获得这样的支持吗(可能有一些旋钮?),或者我应该以两种形式编译我的库:使用 real time() 函数进行生产和使用我自己控制的 time() 函数进行测试?
我对跨平台解决方案很感兴趣,所以像 LD_PRELOAD 这样的技巧不适合我。
更新:我知道我应该为 real time() 函数提供一些包装器,我会做这些包装器。我的问题是:我是否可以在我的生产库中拥有这些库并在运行时进行控制,或者我永远不应该这样做并且总是应该编译 2 个库:一个用于生产,第二个用于测试?
【问题讨论】:
-
喜欢这个问题。我经常阅读诸如“模拟这个,模拟那个”之类的语句,其中这个和那个是文件系统,网络等东西,但我认为我没有在任何地方的代码中看到过这种情况(虽然没有彻底搜索) .
-
查看这个 SO 问题/答案:stackoverflow.com/questions/4594652/…
-
@stijn:我可以将对 real time() 函数的调用替换为调用 real time() 函数或我自己的假 time() 函数的包装函数,我只需要弄清楚如何控制运行时将使用哪种函数。
标签: c unit-testing testing time cross-platform