这个PHPUnit测试是否有意义(或者我正在测试框架/ PHP)?
发布时间:2020-12-13 16:18:25 所属栏目:PHP教程 来源:网络整理
导读:我刚刚开始使用 PHPUnit和TDD. 其中,我无法回答这个问题:这是一个很好的考验吗?我实际上是在测试我的代码还是已经测试过的东西(即框架或PHP本身)? 很少的例子,这是测试主题: class DateMax extends Constraint{ /** * @var string */ public $limit; /**
我刚刚开始使用
PHPUnit和TDD.
其中,我无法回答这个问题:这是一个很好的考验吗?我实际上是在测试我的代码还是已经测试过的东西(即框架或PHP本身)? 很少的例子,这是测试主题: class DateMax extends Constraint { /** * @var string */ public $limit; /** * @var string */ private $invalidLimit = 'Option "limit" should be a valid date/time string.'; public function __construct($options = null) { parent::__construct($options); if(false === strtotime($this->limit)) { throw new InvalidOptionsException($this->invalidLimit,['limit']); } } } 我想测试当传递无效的“limit”选项时预期会出现InvalidOptionsException,否则$constraint-> limit会保存正确的值: /** * @dataProvider getInvalidLimits * @expectedException InvalidOptionsException */ public function testInvalidLimits($testLimit) { new DateMax($testLimit); } /** * @dataProvider getValidLimits */ public function testValidLimits($testLimit) { $constraint = new DateMax($testLimit); $this->assertEquals($testLimit,$constraint->limit); } /** * @return array[] */ public function getInvalidLimits() { return array(array('invalid specification'),array('tomorr')); } /** * @return array[] */ public function getValidLimits() { return array(array('now'),array('+1 day'),array('last Monday')); } 所以问题是否有任何意义,或者我正在测试框架/ PHP本身? 解决方法
当然它有道理,因为你覆盖了Constraint类的构造函数,你可能会破坏它里面的东西.所以基于你的构造函数逻辑基本上你想测试两件事:
>检查你是否使用相同的选项调用父的构造函数,只需一次(你可以使用mock来实现这个目的,你不关心设置适当的限制值,因为这应该在Constraint类中测试) 编辑:第一个测试有用的一些用例可能是这样的: 假设您希望以某种方式扩展DateMax构造函数: public function __construct($options = null) { $this->optionsWithDecrementedValues = $this->doWeirdThings($options); parent::__construct($options); if(false === strtotime($this->limit)) { throw new InvalidOptionsException($this->invalidLimit,['limit']); } } 但是例如你没有注意到方法“doWeirdThings”将引用作为参数.所以实际上它改变了$options值,你没想到的,但是第一次测试失败了所以你不会错过它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |