将类替换为其存根以进行测试

时间:2017-10-07 13:05:11

标签: python python-3.x unit-testing python-3.6

我有以下示例代码:

class AuxiliaryClass:
    @staticmethod
    def high_cost_method():
        "Do something"

class MyTestedClass:
    def do_something(self):
        something = AuxiliaryClass.high_cost_method()
        "do something else"

我想测试MyTestedClass。为此,我创建了AuxiliaryClassStub类来覆盖high_cost_method()。我希望我的测试从do_something()执行MyTestedClass,但do_something()应该使用存根而不是真正的类。
我怎么能这样做?
我真正的辅助类很大,它有很多方法,我会在很多测试中使用它,所以我不想修补单个方法。我需要在测试期间更换全班。

请注意,high_cost_method()是静态的,因此在这种情况下,模仿__init__()__new__()将无济于事。

1 个答案:

答案 0 :(得分:0)

如果您在self.__class__.high_cost_method内使用do_something,是否有效?这样就可以避免直接引用类名,这应该启用子类化并使用AuxiliaryClass中的方法覆盖static方法。

class MyTestedClass:
    def do_something(self):
        something = self.__class__.high_cost_method()
        something()

    @staticmethod
    def high_cost_method():
        print("high cost MyTestedClass")


class AuxiliaryClass(MyTestedClass):
    @staticmethod
    def high_cost_method():
        print("high cost AuxiliaryClass")

然后你得到

test = AuxiliaryClass()
test.high_cost_method()
  

高成本AuxiliaryClass

,否则

test = MyTestedClass()
test.high_cost_method()
  

高成本MyTestedClass