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

发布于 2024-11-30 07:54:22 字数 242 浏览 2 评论 0原文

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

我发现 PHPUnit 扩展 Mockfunction,但我认为,在 Yii 中有更优雅的方式来模拟函数。

请帮忙。有些例子会非常令人愉快。

I'm writing unit test for my models. Most of them use many standart functions, like time(), date() and so on. What is best approach to mock these functions in Yii testing style?

I found PHPUnit extension Mockfunction, but i think, that there is more elegant way to mock functions in Yii.

Help pls. Some examples will be very pleasant.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

葬シ愛 2024-12-07 07:54:22

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

简而言之,如果您的代码中有像 time() 这样的库函数,那么显然您不能按原样模拟它。您应该对此调用有某种完全愚蠢的抽象,例如 TimeSource->now() ,并且您的 SUT 应该使用此抽象而不是直接调用库函数。这样,在单元测试中,您可以用您认为合适的任何方式创建的假冒的 TimeSource 替换真实的 TimeSource ,通过 Mockery、通过 PHPUnit 模拟、手动编写假类,等等。当然,这个伪造应该返回相关函数的可控结果。

I know that this question is old, but it's interesting nevertheless.

In short, if you have a library function like time() in your code, then obviously you cannot mock it as is. You should have some sort of completely dumb abstraction around this call like TimeSource->now() and your SUT should use this abscraction instead of direct call to library function. This way in your unit tests you can substitute real TimeSource with the fake created in any way you will find suitable, via Mockery, via PHPUnit mocks, writing fake class by hand, you name it. This fake should return controllable results for function in question, of course.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文