【发布时间】:2018-03-28 23:37:09
【问题描述】:
我正在通过模拟一个类并测试函数调用来测试逻辑流。
function() setUp()
{
$this->shipping_method = $this->getMockBuilder(Wc_Trincargo_Shipping_Method::class)
->getMock();
$this->shipping_method->set_post_data([
'woocommerce_wc-trinicargo-shipping_waybill_password' => 'xxx',
'woocommerce_wc-trinicargo-shipping_waybill_username' => 'xxxx',
'woocommerce_wc-trinicargo-shipping_waybill_customer_id' => uniqid(),
'woocommerce_wc-trinicargo-shipping_waybill_pickupdays' => 2
]);
}
set_post_data 是一个设置 protected 属性的公共方法。
稍后我测试调用另一个需要检查上述 protected 属性的方法。我知道他们说你不能模拟受保护的和私有的属性,但如果这些属性是由公共方法设置的......难道不应该吗?
【问题讨论】:
-
您不应该知道该方法首先设置了受保护的属性。这有点不对。这是该方法的内部实现,您在测试时不应该意识到这一点。
-
@RoyalBg 不确定你在这里想说什么。
-
我想说的是,您根据业务规范测试方法,而不是根据背后代码的知识。这是错误的。想象一下,您正在测试一个编译好的库并且不知道代码的内部行为,您只知道它的行为是由业务决定的。
-
最初我正在测试所述方法的逻辑,但是由于未设置所述属性而导致测试失败,如果这有意义的话,这并不是测试的一部分
-
哦,这完全不同。检查是否有专门的框架来测试 woocommerce。他们自己在项目中进行了测试 - 检查他们是如何做到的。