当我们使用实例变量时,如何模拟一个类来单独测试它的方法?这是我试图测试的代码的一个例子。
class Employee:
def __init__(self, id):
self.id = id
self.email = self.set_email()
def set_email():
df = get_all_info()
return df[df[id] == self.id].email[0]
def get_all_info():
# ...
我的想法是模拟Employee类然后调用set_email方法来测试它。测试代码:
def test_set_email(get_all_info_mock):
# ...
mock_object = unittest.mock.Mock(Employee)
actual_email = Employee.set_email(mock_object)
assert actual_email == expected_email
运行测试时,我收到以下错误。
AttributeError:Mock对象没有属性'id'
我试着按照这里的指示:Better way to mock class attribute in python unit test。我也尝试将mock设置为属性mock,id为side_effect,id为return_value,但我似乎无法弄明白。我不想修补Employee类,因为目标是测试它的方法。
您需要做的就是设置id
属性。
def test_set_email(get_all_info_mock):
# ...
mock_object = unittest.mock.Mock(id=3) # Or whatever id you need
actual_email = Employee.set_email(mock_object)
assert actual_email == expected_email