如何在不实例化类的情况下对方法进行单元测试?

时间:2014-11-24 13:02:02

标签: python unit-testing methods

我的课程SocketHandler的方法为calculate_ticket

class SocketHandler(A, B, C ..):
    ..

    calculate_ticket(self, key):
        ..
        return ticket

    ..

现在我想测试该方法而不必实例化该类,因为它与很多东西相结合。这可能吗?

2 个答案:

答案 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

您甚至可以在单元测试中手动设置应该拥有的属性。

当然,最好还是减少耦合。