PHP Mockry部分测试double未从父类调用方法

PHP Mockry部分测试double未从父类调用方法,php,unit-testing,mockery,Php,Unit Testing,Mockery,我不明白为什么我的部分测试二次调用的方法不正确。这些是我的课程: 抽象类模型 { 公共函数更新(数组$attributes){ $this->performUpdate($attributes); } 抽象保护函数性能更新(数组$属性); } 类产品扩展模型 { 受保护的函数性能更新(数组$attributes) { 打印(属性); } } $mock=mockry::mock(产品::类)->makePartial(); $mock->update([]);//永远不会调用“performUp

我不明白为什么我的部分测试二次调用的方法不正确。这些是我的课程:

抽象类模型
{
公共函数更新(数组$attributes){
$this->performUpdate($attributes);
}
抽象保护函数性能更新(数组$属性);
}
类产品扩展模型
{
受保护的函数性能更新(数组$attributes)
{
打印(属性);
}
}
$mock=mockry::mock(产品::类)->makePartial();
$mock->update([]);//永远不会调用“performUpdate”方法

运行代码时,
产品
类中的
性能更新
。按预期调用“update”方法,但从未调用real
performUpdate
方法。相反,它只返回null,就好像它不是部分模拟一样。如果没有设置期望值,部分模拟应该遵从模拟类中的方法,那么为什么不调用我的方法呢?

在创建模拟时,必须使用
shouldlallowmockingprotectedmethods
。这将解决您看不到输出的问题。

创建模拟时,您必须使用
shoulldallowmockingprotectedmethods
。这将解决您看不到输出的问题。

事实并非如此。未调用该方法。你自己试过吗?是的,我试过了,效果很好。由于没有从函数
performUpdate
返回任何内容,因此返回的是
null
。如果您在控制台中尝试相同的操作,您将看到文本,但我不会考虑返回任何内容。运行该代码应该打印一个空数组。对我来说不是。它对你有用吗?我必须再次检查。很抱歉,我正在测试一个方法为公共的类。我对答案进行了编辑,以展示如何将其与受保护的方法一起使用。但我不是在嘲笑受保护的方法。受保护的方法是一个内部调用。由于它是一个部分模拟,对public update方法的调用应该像正常情况一样在内部调用performUpdate,但事实并非如此。未调用该方法。你自己试过吗?是的,我试过了,效果很好。由于没有从函数
performUpdate
返回任何内容,因此返回的是
null
。如果您在控制台中尝试相同的操作,您将看到文本,但我不会考虑返回任何内容。运行该代码应该打印一个空数组。对我来说不是。它对你有用吗?我必须再次检查。很抱歉,我正在测试一个方法为公共的类。我对答案进行了编辑,以展示如何将其与受保护的方法一起使用。但我不是在嘲笑受保护的方法。受保护的方法是一个内部调用。由于它是一个部分模拟,对public update方法的调用应该像正常情况一样在内部调用performUpdate,但事实并非如此。