【发布时间】:2018-08-15 16:34:42
【问题描述】:
我有一个在__init__ 以外的方法中初始化实例变量的类。该实例变量在__init__ 方法中被进一步引用。
在下面的代码中,ProductionClass 是我正在测试的类。在ProductionClass 中,__init__ 调用方法a_method。方法a_method 初始化实例变量inst_var_2。 inst_var_2 被__init__ 用来设置另一个实例变量inst_var_3。
class LibraryClass(object):
def __init__(self):
self.some_attrib = "some_attrib_value"
class ProductionClass(object):
def __init__(self, arg_one):
self.inst_var_1 = arg_one
self.a_method()
self.inst_var_3 = self.inst_var_2.some_attrib
def a_method(self):
self.inst_var_2 = LibraryClass()
import unittest
from unittest.mock import patch, MagicMock
class ProdTestCase(unittest.TestCase):
@patch.object(ProductionClass, 'a_method')
def test_init_method(self, mock_method):
instance = ProductionClass(1234)
self.assertEqual(1234, instance.inst_var_1)
mock_method.assert_called_once_with()
我正在尝试对ProductionClass 的__init__ 方法进行单元测试,但由于缺少实例变量inst_var_2,我无法创建ProductionClass 的实例。这是错误消息:
Traceback (most recent call last):
...
File "/... production_class.py", line 9, in __init__
self.inst_var_3 = self.inst_var_2.some_attrib
AttributeError: 'ProductionClass' object has no attribute 'inst_var_2'
我的问题是,在我模拟 a_method 时,是否可以对 __init__ 方法进行单元测试。我想模拟a_method,因为我不希望该方法实例化LibraryClass。
【问题讨论】: