有一个变量抽象类。每当值更改时,它都有一个_callbacks
方法用于执行控制器类提供的功能。我要为此编写测试。
from unittest.mock import Mock
class Variable():
def __init__(self, value=0):
self.value = value
self.callbacks = {}
def add_callback(self, func):
self.callbacks[func] = None
def _callbacks(self):
for func in self.callbacks:
func(self.value)
def test_var_add_callback():
func = Mock()
var = Variable()
var.add_callback(func)
var._callbacks()
assert func.assert_called()
使用pytest可以得到:
================================== FAILURES ===================================
____________________________ test_var_add_callback ____________________________
def test_var_add_callback():
func = Mock()
var = Variable()
var.add_callback(func)
var._callbacks()
> assert func.assert_called()
E AssertionError: assert None
E + where None = <bound method NonCallableMock.assert_called of <Mock id='2389330693592'>>()
E + where <bound method NonCallableMock.assert_called of <Mock id='2389330693592'>> = <Mock id='2389330693592'>.assert_called
tests\test_stack.py:25: AssertionError
===================== 1 failed, 18 passed in 0.40 seconds =====================
我不明白为什么它不起作用。我读了这个Understanding the Python Mock Object Library #Assertions and Inspection,而且我很确定自己所做的事情与示例中的相同。而且,即使我手动调用None
,断言也会返回func
def test_var_add_callback():
func = Mock()
var = Variable()
var.add_callback(func)
var._callbacks()
func()
assert func.assert_called()
请帮助我找到我想念的东西。
答案 0 :(得分:1)
只需删除 assert
语句前的 func.assert_called()
关键字。
func.assert_called()
返回 None
,assert None
将引发 AssertionError
。