4

我想为 python MFCC特征提取器编写一些测试,以便与nosetest一起运行。除了一些较低级别的测试外,我还希望能够在单元测试中存储一些标准输入和预期输出文件。

目前,我们正在对服务器上文件的路径进行硬编码,但我希望测试文件(输入和预期输出)位于代码存储库中的某个位置,这样它们就可以在测试的同时保持在源代码控制之下代码。

我遇到的问题是我不确定放置测试文件的最佳位置在哪里,以及当nosetest 调用每个测试函数时如何知道该路径是什么。目前我正在考虑将测试数据存储在与测试相同的文件夹中,并使用__file__它来确定它在哪里(这行得通吗?),但我对其他建议持开放态度。

4

2 回答 2

5

我认为使用__file__来确定测试的位置并将数据存储在旁边是一个好主意。对于我编写的一些测试,我也在做同样的事情。

这:

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

可能是您将获得的最好的,这还不错。:-)

于 2010-09-16T07:05:25.080 回答
0

基于 using 的想法__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'] )
于 2010-09-16T20:53:39.937 回答