2010-09-16 31 views
2

我想寫一些python的測試MFCC功能提取器與nosetest運行。除了一些較低級別的測試外,我還希望能夠在單元測試中存儲一些標準輸入和期望輸出文件。如何存儲python nosetests的測試數據?

目前我們正在對服務器上文件的路徑進行硬編碼,但我更傾向於將測試文件(包括輸入和期望輸出)都放在代碼庫中的某處,以便將它們保存在源代碼中控制測試代碼。

我遇到的問題是我不確定放置測試文件的最佳位置是什麼,以及如何知道nosetest調用每個測試函數時的路徑。此刻,我正在考慮將測試數據存儲在與測試相同的文件夾中,並使用__file__來確定哪裏有問題(這是否有效?),但我願意接受其他建議。

回答

4

我認爲使用__file__來確定測試的位置和存儲數據是一個好主意。我爲我寫的一些測試做同樣的事情。

此:

os.path.dirname(os.path.abspath(__file__)) 

可能是你會得到最好的,這不是壞事。 :-)

0

基於使用__file__的想法,也許你可以使用一個模塊來幫助建立路徑。您可以找到模塊目錄中包含的所有文件,將其名稱和路徑收集在一個字典中供以後使用。

創建一個可以訪問您的測試的模塊,即除測試以外的目錄,例如testData,您可以在其中放置數據文件。在此模塊的__init__.py中,插入以下代碼。

import os 
from os.path import join,dirname,abspath 
testDataFiles = dict() 
baseDir = dirname(abspath(__file__)) + os.path.sep 
for root, dirs, files in os.walk(baseDir): 
    localDataFiles = [(join(root.replace(baseDir,""),name), join(root,name)) for name in files] 
    testDataFiles.update(dict(localDataFiles)) 

假設你叫你的模塊testData,它包含一個名爲data.txt那麼你可以使用在您的測試下面的結構來獲得文件的路徑。 aFileOperation被假定爲是帶一個參數路徑的功能

import unittest 
from testData import testDataFiles 

class ATestCase(unittest.TestCase): 
    def test_Something(self): 
     self.assertEqual(0, aFileOperation(testDataFiles['data.txt']) 

它還允許你使用子目錄,如

def test_SomethingInASubDir(self): 
     self.assertEqual(0, aFileOperation(testDataFiles['subdir\\data.txt']) 
相關問題