当类使用实例变量时,我该如何模拟类以单独测试其方法?这是我要测试的代码示例。
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:模拟对象没有属性“ id”
我尝试按照此处的指示进行操作:Better way to mock class attribute in python unit test。 我还尝试将模拟设置为属性模拟,id为side_effect,id为return_value,但我似乎无法弄清楚。我不想修补Employee类,因为目标是测试它的方法。
答案 0 :(得分:1)
您需要做的就是设置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