2012-10-21 29 views
0

我知道如何爲類設置屬性,但無法找到如何爲一個文件設置..如何將屬性設置爲一個python文件?

flow = ['1','4','5','2'] 

def test_generator(test): 
    def test_parser(self): 
     print test 
    return test_parser 

class API_tests(unittest.TestCase): 
     pass 


for test in flow: 
    test_name = 'test_%s' % test 
    test = test_generator(test) 
    setattr(API_tests, test_name, test) 

這一點,將工作。

我要替換SETATTR()的API_tests是文件對象,而不是類,因此該文件將與功能(test_generator X 4)追加對它們進行設置動態

我的預期結果我跑「nosetests -v」在命令行中,它會顯示「4個測試通過」

這個問題可以在其他作品:如何獲得當前文件爲對象

感謝

+0

當前文件的名稱是'__file__'。這是一個字符串,但是。 – aychedee

+2

您是否打算創建X(本例中爲4)測試nosetest可以運行?如果是這樣,請查看nosetest對測試生成器的支持。簡而言之,編寫一個可生成可調用對象的生成器以及可調用對象的參數。鼻子會將它們全部運行給你。 –

+0

在這裏你可以找到如何在當前模塊中設置屬性(我認爲這是你實際要求的):[我如何在當前模塊上調用setattr()?](http://stackoverflow.com/questions/2933470 /怎麼辦,我叩SETATTR - 上的電流模塊)。 –

回答

0

而不是動態創建在模塊命名空間中測試函數(就像你認爲的那樣),使用nosetest支持測試生成器。

如果鼻子檢測到一個生成器,並且該生成器產生可調用對象以及可調用對象所需的任何參數,它將迭代它併爲您運行每個測試。

你的例子可以改寫爲

def check_flow_value(val): 
    # assert something about val 
    assert True 

def test_flows(): 
    flow = ['1','4','5','2'] 
    for val in flow: 
     yield check_flow_value, val 

鑑於此,鼻子會跑4次測試

+0

響應將是這樣的: API_tests.test_generator.test_flows( '1')...確定 API_tests.test_generator.test_flows( '4',)...確定 API_tests.test_generator.test_flows( '5', )...好吧 API_tests.test_generator.test_flows('2',)...好吧 我用這種方法的問題是1,2,4,5實際上會被替換爲參數的休字典。我只是想提供輸出我將生成的測試名稱,它只會顯示名稱,而不是參數。 可能嗎? – eligro

+0

如果你擔心你的輸出可以動態地包裝你的測試函數,那麼單元測試或nosetest所看到的** test **將是一個非簡單函數,沒有參數。例如。部分:'new_test_method = partial(create_generic_test,arg_name = arg)' – Hardbyte

相關問題