我有一个非常复杂的系统与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 是的,这个设计远非完美,我知道,但是无法帮助它,这是一个遗留问题,所以让我们暂时搁置系统设计讨论,除了一个注意事项: 不要像这样设计你的系统:)
答案 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覆盖,那么在给定参数数量正确的情况下,它会消耗你传递的任何内容。