我想为python MFCC特征提取器编写一些测试,以便使用nosetest运行。除了一些较低级别的测试,我还希望能够通过单元测试存储一些标准输入和预期输出文件。
目前我们正在对我们服务器上文件的路径进行硬编码,但我更倾向于将测试文件(输入和预期输出)放在代码存储库中的某个位置,以便它们可以保持在源代码管理下与测试代码一起。
我遇到的问题是我不确定放置测试文件的最佳位置,以及当nosetest调用每个测试函数时如何知道该路径是什么。目前我正在考虑将测试数据存储在与测试相同的文件夹中,并使用__file__
计算出它的位置(可行吗?),但我愿意接受其他建议。
答案 0 :(得分:5)
我认为使用__file__
来确定测试的位置并将数据存储在其中是一个好主意。我正在为我写的一些测试做同样的事情。
此:
os.path.dirname(os.path.abspath(__file__))
可能是你得到的最好的,而且还不错。 : - )
答案 1 :(得分: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'] )