我目前正在使用nose进行一些测试,当使用带有nose + xunit输出的生成器时,你需要设置当前函数的__name__
属性来正确控制测试的名称在xunit输出中(例如,参见here)。
因为我不想每次都像这样硬编码函数的名称:
def my_function():
for foo in bar:
fn = lambda: some_generated_test(foo)
fn.description = foo.get('name')
my_function.__name__ = foo.get('name')
yield fn
我如何以编程方式引用该函数并设置__name__
?
我曾尝试使用sys._getframe()
生成有关当前函数(名称等)的各种属性,我尝试将其与setattr(*something*, "__name__", some_test_name)
一起使用,但这并不起作用,因为我无法使用; t似乎可以解决sys._getframe()
的哪一部分引用该函数。
答案 0 :(得分:0)
最后通过SO找到了解决方案:https://stackoverflow.com/a/4506081/1808861
比我想象的要复杂得多,但我现在可以:
def my_function():
for foo in bar:
fn = lambda: some_generated_test(foo)
fn.description = foo.get('name')
setattr(get_func(), "__name__", foo.get('name'))
yield fn
然后xunit
输出包含生成器的数据name
条目。