如何在Perl中调用localtime()的单元测试函数?

时间:2010-07-14 01:37:42

标签: perl unit-testing

我有一个调用localtime的方法,我写了一个单元测试。我在测试中调用了localtime,以便我知道预期的答案。到现在为止还挺好。我碰巧在不同时区的机器上运行单元测试,并且可以预见,测试失败了,因为他们有几个小时的休息时间。我想我可以动态地确定正确的预期值,但这似乎违背了在提出问题之前知道答案的想法。

有关如何处理此问题的任何想法?覆盖localtime?这看起来很极端。

谢谢!

2 个答案:

答案 0 :(得分:6)

我认为在单元测试中计算答案的值没有任何问题。单元测试应该足够简单,以避免与复杂性相关的错误,但简单的时区计算可能不会跨越线。

但是,在这种特殊情况下,您可以将时区设置为固定值(或几个)作为测试的一部分。请参阅有关setting time zone in Perl的此Stack Overflow帖子。

答案 1 :(得分:5)

我不确定您的要求是什么,但您可以使用Test::MockTimeTime::Mock完成某项工作,这两项工作都会取代localtime和嘲笑的朋友那些你想要它们行事的版本。