我在使用Python中的Mock进行单元测试时遇到了困难。我有一个类中的方法start_thing()
需要进行测试:
class ComplexClass:
def __init__(self, lots, of, args):
self.lots = lots
..
def start_thing(self):
import pdb; pdb.set_trace()
print "some error!!"
assert False
这个类本身就比较复杂,手动模拟起来很麻烦。这就是为什么我开始尝试使用Mock。
我想设置一个模拟实例,以便轻松运行单元测试,但不模拟start_thing()
方法,以便测试真正的start_thing()
实现而不是模拟版本。因此我创建了这个:
class TestComplexClass(TestCase):
@patch.object(module.ComplexClass, 'start_thing')
def test_start_thing(self, mock_method):
ComplexClass.start_thing()
当进行测试时,我的实际方法
start_thing()
中未命中调试跟踪、断言或打印语句,这表明我已经对类和方法进行了模拟 - 而我只想模拟对象并测试真正的方法。我在这里做错了什么?这是否可能?我发现许多使用Mock的示例展示了如何创建要测试的方法的模拟版本,但我认为这有点毫无意义,因为我不想检查它是否被正确调用,而是想测试真实代码中的实现,并模拟它所属的类以便更容易创建。
也许我没有完全理解Mock测试的概念?