如何存储python nosetests的测试数据?

时间:2010-09-16 05:57:29

标签: python unit-testing nosetests

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

目前我们正在对我们服务器上文件的路径进行硬编码,但我更倾向于将测试文件(输入和预期输出)放在代码存储库中的某个位置,以便它们可以保持在源代码管理下与测试代码一起。

我遇到的问题是我不确定放置测试文件的最佳位置,以及当nosetest调用每个测试函数时如何知道该路径是什么。目前我正在考虑将测试数据存储在与测试相同的文件夹中,并使用__file__计算出它的位置(可行吗?),但我愿意接受其他建议。

2 个答案:

答案 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'] )