在PHPUnit中模拟对象来模拟静态方法调用?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在PHPUnit中模拟对象来模拟静态方法调用?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1285字,纯文字阅读大概需要2分钟。
内容图文
我试图测试一个管理数据库中数据访问的类(你知道,CRUD,本质上).我们正在使用的DB库碰巧有一个API,您首先通过静态调用获取表对象:
function getFoo($id) {
$MyTableRepresentation = DB_DataObject::factory("mytable");
$MyTableRepresentation->get($id);
... do some stuff
return $somedata
}
……你明白了.
我们试图测试这个方法,但是模拟DataObject的东西,以便(a)我们不需要测试的实际数据库连接,(b)我们甚至不需要为测试包含DB_DataObject lib .
但是,在PHPUnit中我似乎无法获得$this-> getMock()来适当地设置静态调用.我有…
$DB_DataObject = $this->getMock('DB_DataObject', array('factory'));
…但测试仍然说未知方法“工厂”.我知道它正在创建对象,因为在它说它无法找到DB_DataObject之前.现在它可以.但是,没办法?
我真正想要做的是拥有两个模拟对象,一个用于返回的表对象.因此,我不仅要指定工厂是静态调用,而且还要返回我已经设置的一些指定的其他模拟对象.
我应该提一下,我之前在SimpleTest中做过这个(无法找到代码)并且它工作正常.
是什么赋予了?
[UPDATE]
我开始意识到它与expect()有关
解决方法:
我同意你们两个人最好不要使用静态呼叫.但是,我想我忘了提到DB_DataObject是第三方库,静态调用是他们代码使用的最佳实践,而不是我们的代码.还有其他方法可以使用涉及直接构造返回对象的对象.它只是将那些darned include / require语句留在使用该DB_DO类的任何类文件中.这很糟糕,因为如果你同时试图在你的测试中模拟一个同名的类,测试会破坏(或者只是不被隔离) – 至少我认为.
内容总结
以上是互联网集市为您收集整理的在PHPUnit中模拟对象来模拟静态方法调用?全部内容,希望文章能够帮你解决在PHPUnit中模拟对象来模拟静态方法调用?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。