import re
import sys
import inspect
import testcases
testClass = re.compile(r'.*Case$')
testMethod = re.compile(r'.*Test$')
for class_name, class_obj in inspect.getmembers(testcases, inspect.isclass):
if testClass.match(class_name):
for method_name, method_obj in inspect.getmembers(class_obj, inspect.ismethod):
if testMethod.match(method_name):
# RIGHT HERE I WOULD LIKE TO INVOKE method_name
问问题
1358 次
2 回答
8
在您的代码之后:
for class_name, class_obj in inspect.getmembers(testcases, inspect.isclass):
if testClass.match(class_name):
for method_name, method_obj in inspect.getmembers(class_obj, inspect.ismethod):
if testMethod.match(method_name):
# RIGHT HERE I WOULD LIKE TO INVOKE method_name
你可以这样做:
methodobj = getattr(classobj, method_name)
methodobj("appropriate arguments go here")
如果,也就是说,您对“适当的论点”是什么有任何线索。第一个参数大概是类的一个实例——哪个实例?你如何检索或创建它?而且,所有其他论点呢?它们是什么,您想为它们传递什么值?
获取方法对象,准备好被调用,是你最少的问题——getattr
正如你所看到的,这样做真的很好而且最容易!-)——但是你需要对上面关于论点的其他问题做出明智的回答(尤其是第一个,你想调用方法的实例)在你的问题实际上很有意义之前!-)
于 2010-01-26T04:55:22.267 回答
0
非常感谢亚历克斯的快速回复。
第一个参数大概是类的一个实例——哪个实例?你如何检索或创建它?
好的,所以如果我理解正确,方法调用 methodobj 的第一个参数应该是 classobj 的实例?下面怎么样。
methodobj = getattr(classobj, method_name)
methodobj(classobj())
那么所有其他论点呢?它们是什么,您想为它们传递什么值?
Naaah,没有其他参数,这些是在方法中设置变量的测试用例。我只想能够添加测试用例而无需修改其他代码来运行它们。
再次感谢,我还没有尝试过,但是从我读到的关于 getattr 的内容中,它似乎是我正在寻找的。随着一些玩耍,我可以让它工作。
于 2010-01-26T16:01:10.543 回答