框架单元测试.如何模拟time()和其他标准函数


Yii framework unit Testing. How to mock time() and other standart functions?

我正在为我的模型编写单元测试。它们中的大多数使用许多标准函数,如time()、date()等。在Yii测试风格中模拟这些函数的最佳方法是什么?

我找到了PHPUnit扩展Mockfunction,但我认为,在Yii中有更优雅的方法来模拟函数。

我知道这个问题很老了,但它仍然很有趣。

简而言之,如果您的代码中有一个像time()这样的库函数,那么显然您不能按原样模拟它。您应该在这个调用周围有一些完全愚蠢的抽象,比如TimeSource->now(),您的SUT应该使用这个抽象,而不是直接调用库函数。这样,在你的单元测试中,你可以用任何你认为合适的方式来代替真实的TimeSource,通过mock,通过PHPUnit mock,手工编写假类,你可以命名它。当然,这个函数应该为所讨论的函数返回可控制的结果。