2013-08-07 17 views
0

我創建了一個Python類Test_getFileSize爲使用鼻對於Python鼻試驗班:什麼是傳遞可選參數的正確方法

相關章節:和

def __init__(self,mytestfile="./filetest",testsize=102400): 
    ''' Constructor''' 
    print " Running __init__", testsize,mytestfile 
    self.testsize=testsize 
    self.mytestfile = mytestfile 

主力方法:

@with_setup(setUp, tearDown) 
def test_getFileSize(self): 
    from nose.tools import ok_, eq_,with_setup 
    import mp4 
    with open(self.mytestfile,"rb") as out: 
      filesize=mp4.getFileSize(out) 
      eq_(self.testsize,filesize,msg='Passed Test size') 
      print "Results ", filesize,self.testsize 

如果我對包含此類的文件運行nosetest,它會使用默認值和正確的setUp和tearDown方法正確地測試類。問題是,當我編寫一個類來做這件事時,setUp方法永遠不會運行。

我想要做的就是測試不同的文件大小(即傳遞文件大小的值)。

如果有更好的方法來做到這一點,我全都耳熟能詳。如果可能,我寧願不通過命令行來完成。

感謝 吉姆

回答

0

你可以寫一個測試功能(一類不屬於),其中測試功能本身是一臺發電機,每個產量返回一個新的功能與參數生成另一個測試運行。如果您有500個不同的文件名/文件大小作爲您想要測試的列表,那將很有效。

在這裏看到一個簡單的例子/文檔:http://nose.readthedocs.org/en/latest/writing_tests.html#test-generators

與測試類,事情變得有點棘手 - 因爲它不會讓你使用這種生成方法類的方法。您可以使用元類來返回一個具有適當數量的函數的類來運行您的測試(例如每例一個),但這可能超出您想要執行的操作。這就是說,你可能會發現只有一個測試方法可以遍歷一系列文件名/大小,並對每個文件名執行測試就足夠了。那裏的工作量明顯較少,但也會導致一組測試的單一「測試」輸出行。

您可能引用了這個問題一個答案,一個人是如何做到這一點:

nose, unittest.TestCase and metaclass: auto-generated test_* methods not discovered

+0

你好,我調查了你的方法,我發現我有一個問題吧:我用的是類結構一種傳遞參數的方法(在這種情況下,文件名和大小)來設置。我失去了功能切換到功能。有沒有更清潔的選擇,使用全球? –

+0

您可以使用元類來生成基於迭代器的新方法 - 假設您在創建測試類的實例之前知道要測試的內容。 – chander

+1

以前從未使用過元類。對我的蟒蛇來說,仍然有點像paduwan。你能推薦一個好的資源嗎?謝謝 –

相關問題