我目前正在为我公司的构建脚本实施一些单元测试。为了消除臃肿并使其更容易实现新测试,我让我的所有测试类都继承自一个名为的自定义子类,该子类BasicTest继承自 PyUnit 的 TestCase。
目前所有测试都使用两个函数BasicTest:构造函数(尽管它显然可能在将来被覆盖)和runTest()方法,如果没有传入值,超级构造函数使用的默认方法名称(例如BasicTest(),将创建一个测试这将runTest()在被调用时执行该方法,而BasicTest('Foo')将使用该Foo()方法)。
我想runTest()从调用它的继承对象中简单地运行所有可能的测试。但是,由于runTest()仅在子类中定义BasicTest并由子类继承,我正在寻找一种方法来动态地从父类中调用所有子类的方法。我知道这违反了面向对象编程的规则,但据我所知,Python 从一开始就不是遵循规则的:)
为清楚起见,以下说明了我的意图:
我想runTest()从子类对象中调用并且只处理该对象的方法。假设SubclassTest()有方法TestParse()和TestExec(). 我想要这样:
sub = SubClassTest()
sub.runTest()
运行TestParse()and TestExec(),但我希望在不被覆盖的情况下runTest()定义和继承该方法。BasicTest