我正在研究一些类,对于测试过程,能够在for循环中运行类方法非常有用。我正在添加方法并更改其名称,我希望这在我运行类进行测试的文件中自动更改。
我使用下面的函数来获取我需要自动运行的方法列表(我为示例删除了一些其他条件语句,以确保我只运行某些需要测试的方法,并且只有self一个论点)
def get_class_methods(class_to_get_methods_from):
import inspect
methods = []
for name, type in (inspect.getmembers(class_to_get_methods_from)):
if 'method' in str(type) and str(name).startswith('_') == False:
methods.append(name)
return methods
是否可以使用返回的列表'methods'在for循环中运行类方法?
或者有没有其他方法可以确保我可以在我的测试运行文件中运行我的类方法,而无需更改或添加我在课程中更改的内容?
谢谢!
答案 0 :(得分:0)
看起来你想要getattr(object, name[, default])
:
class Foo(object):
def bar(self):
print("bar({})".format(self))
f = Foo()
method = getattr(f, "bar")
method()
作为旁注:我不确定动态生成测试方法列表是一个好主意(看起来就像反模式一样) - 现在很难说没有整个项目的背景所以请用所需的一粒盐来评论;)