【发布时间】:2012-01-24 12:52:15
【问题描述】:
所以我决定研究在 PHPUnit 中使用接缝,但我遇到了一个问题
我以打破对数据库类的依赖关系的方式重新安排了我的课程
db_Class::getMyData($vars);
成为
self::getMyData($vars);
我在代码中添加了函数
protected static function getMyData($vars) {
return db_Class::getMyData($vars);
}
这样做是为了创建一个继承此类并重载 getMyData 函数的类。当我运行我的测试用例时能够改变它。
例如,在继承上述类并重载该函数的接缝类中:
protected static function getMyData($vars) {
return array('id'=>1, 'name'=>"My Name");
}
这将非常有用,因为我可以随意更改数据。但是,当使用 PHPUnit 时,您可以使用 $this->getMock 和类似方法运行模拟。我能在 seam 类中实现这一点吗?
我正在尝试寻找一个不使用依赖注入器的解决方案,这将是我的另一种选择,一点也不差,只是想评估这两种选择。
Michael C. Feathers 表示接缝如下:
A seam is a place where you can alter behavior in your program without editing in that place.
所以我可能无法了解完整的情况,而且我已经尝试了解了一段时间,但我无法理解它。如果您有任何想法或问题,请发表评论。
我要求的是一种在不同场景中轻松使用模拟的方法。我并不总是想在接缝中返回相同的值,有时我想返回 null 以得到错误,有时我想返回一个包含正确数据的数组,有时可能还有其他东西。
谢谢
【问题讨论】:
标签: unit-testing mocking phpunit