2017-02-02 66 views
0

我目前使用的鼻子進行一些測試,並使用與鼻+的xUnit輸出發電機,當你需要設置當前功能的__name__屬性適當地控制在該測試的名稱xunit輸出(例如參見here)。的Python - 更新當前功能__name__屬性編程

因爲我不想硬編碼函數的名稱,每次是這樣的:

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)使用各種屬性,但我不能似乎摸出sys._getframe()引用哪個部分沒有工作功能。

+0

爲什麼不只是'def some_test_name():'? – user2357112

+0

在函數之外做這件事,或者寫這樣做的裝飾器。 – YOU

+0

另外我認爲inspect模塊可以幫助你獲取函數的名字。 – YOU

回答

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條目。