在decorator中传递side_effect和在函数中传递set有什么区别?什么时候我应该优先使用一个?
@patch("my_class.Order.get_order", side_effect="mock_order")
def test_order(self, mock_order):
这是我使用它的另一种方式
@patch("my_class.Order.get_order")
def test_order(self, mock_order):
mock_order.side_effect = self.mock_order
1条答案
按热度按时间7rtdyuoh1#
除了副作用发生的时间外,没有任何差异。
在您的示例中,副作用设置在测试函数的开头,这两个变量在语义上是可以互换的,使用哪个变量是一个品味问题(我认为装饰器最能表明它是针对整个测试的,但如果装饰器表达式太长,也要考虑可读性)。
原则上,在应用副作用的时候是有区别的,因为装饰器在加载时创建修补对象,而在测试中分配副作用只在运行时分配,尽管就我所见,这并不影响测试功能。
只有在第一个方法中使用全局已知的变量或函数作为副作用时才是这样,因为类本身还没有定义,并且在加载时不存在类示例。如果您想使用类本身的属性或方法,则只有第二个变量才起作用。任何依赖于测试类本身的副作用都不会起作用。
如果你只想在测试的后期设置副作用,或者想在测试过程中改变它,显然只能使用第二个变量。
总结如下: