gpt4 book ai didi

unit-testing - PHPUnit 和接缝

转载 作者:行者123 更新时间:2023-12-04 06:04:11 25 4
gpt4 key购买 nike

所以我决定研究在 PHPUnit 中使用接缝,但我遇到了一个问题

我以打破对数据库类的依赖关系的方式重新安排了我的类(class)

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 和类似方法运行模拟。我能在接缝类中实现这一点吗?

我正在尝试寻找一个不使用依赖注入(inject)器的解决方案,这将是我的另一种选择,一点也不差,只是想评估这两种选择。

Michael C. Feathers 表示接缝如下:
A seam is a place where you can alter behavior in your program without editing in that place.

所以我可能无法了解全貌,我已经尝试了解了一段时间,但我无法理解它。如果您有任何想法或问题,请发表评论。

我要求的是一种在不同场景中轻松使用模拟的方法。我并不总是想在接缝中返回相同的值,有时我想返回 null 以获取错误,有时我想返回一个包含正确数据的数组,有时可能还有其他东西。

谢谢

最佳答案

因为在调用静态方法时必须直接引用该类,所以不能像非静态方法一样覆盖它们。 Static methods make testing difficult.我不会费心重复那里写的内容,我强烈建议您点击答案中的链接。

无论如何,为什么该方法是静态的?受到保护,您只能从同一类或其子类中调用它。你能在这里发布更多的上下文吗?你打算如何使用它,你将在哪里测试它?你能把它改成非静态的吗?

关于unit-testing - PHPUnit 和接缝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8577476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com