我的课程SocketHandler
的方法为calculate_ticket
:
class SocketHandler(A, B, C ..):
..
calculate_ticket(self, key):
..
return ticket
..
现在我想测试该方法而不必实例化该类,因为它与很多东西相结合。这可能吗?
答案 0 :(得分:5)
使用mock
库有几种方法。一种简单的方法是模拟实例本身,然后使用“long”形式调用方法。
class ClassToTest(object):
def __init__(self):
pass
def method_to_test(self, y):
self.x = y
return 5
fake_instance = mock.Mock()
ClassToTest.__init__(fake_instance)
x = ClassToTest.method_to_test(fake_instance, 3)
assert x == 5
assert fake_instance.x == 3
答案 1 :(得分:2)
我能想到的主要hacky方式是创建一个子类并覆盖__init__
:
class FakeSocketHandlerForTesting(SocketHandler):
def __init__(self, *args, **args):
pass
您甚至可以在单元测试中手动设置应该拥有的属性。
当然,最好还是减少耦合。