php判断方法有无参数,检查mock的方法是否被调用,没有任何参数传递(在phpunit中)...

虽然rdlowrey是正确的,with()没有规定检查没有参数传递,但问题并不在于PHPUnit,而是PHP本身.

首先,如果您的方法不提供默认值,如果您没有传递任何参数,解释器将引发致命错误.这是预期的,与手头的问题并不完全相关,但重要的是要向前推进.

其次,如果您的方法提供默认值,调用不带参数的方法将导致PHP在PHPUnit涉及到之前改变调用,以传递默认值.这是一个简单的测试,它演示了PHP在PHP可以检查参数之前插入自身.这是关键,认识到,PHP创建的模拟类具有与嘲笑类相同的签名 – 包括默认值.

class MockTest extends PHPUnit_Framework_TestCase {

public function test() {

$mock = $this->getMock('Foo',array('bar'));

$mock->expects($this->once())

->method('bar')

->with() // does nothing,but it doesn't matter

->will($this->returnArgument(0));

self::assertEquals('foobar',$mock->bar()); // PHP inserts 1 and 2

// assertion fails because 1 != 'foobar'

}

}

class Foo {

public function bar($x = 1,$y = 2) {

return $x + $y;

}

}

这意味着您可以验证没有传递任何信息或默认值已通过,但您不能更具体.

你能解决这个限制吗?您可以在覆盖方法时从参数中删除默认值,因此您应该能够创建一个子类并模拟它.这值得么?我最初的反应是,这是一个巨大的代码气味.您的设计或测试都在做错事(tm).

如果你能提供一个真实的,具体的例子,你真的需要做这种测试,值得花点时间思考一下解决方案.在此之前,我对纯粹的“不要这样做”的学术回答感到满意.

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值