如何在python

时间:2015-09-22 09:37:43

标签: python unit-testing override method-overriding

我有一个非常复杂的系统与python 2.7。通常在子类中,我需要使用'pass'覆盖父类的方法,如:

class Parent():
    def some_method(self, data):
       # do something to data here
       ....

class Child(Parent):
   def some_method(self, data):
       # Do not touch data, it should remain unchanged
       pass

所以我的问题是:有没有办法测试该方法被'pass'语句覆盖?我的意思是一个抽象的测试,因为它对“数据”一无所知:所有它都是Child类,方法名称就是这样。 当然,我可以测试运行some_method数据后没有改变,但考虑到我所拥有的系统的复杂性,有太多的地方可以检查是否有什么东西受到影响,所以我正在寻找一个抽象的解决方案。

UPD 是的,这个设计远非完美,我知道,但是无法帮助它,这是一个遗留问题,所以让我们暂时搁置系统设计讨论,除了一个注意事项: 不要像这样设计你的系统:)

1 个答案:

答案 0 :(得分:0)

所以我到目前为止的解决方案是(不是完全抽象的,但对我的情况来说足够抽象):

在测试用例中调用子类方法故意传递错误类型的值,比如我的情况下的None:

def test_method_pass_statement(self):
    test_class = Child()
    try:
        # If method isn't overridden, this should raise exception
        # but check for your case if None doesn't raise exception
        test_class.some_method(None)
    except <Exception_type>:
        # Customise error and message the way you want
        raise

如果方法被pass覆盖,那么在给定参数数量正确的情况下,它会消耗你传递的任何内容。