如何为Python NoseTests存储测试数据?

4

我想为一个Python的MFCC特征提取器编写一些测试代码,并在nosetest中运行。除了一些低级别的测试之外,我还想能够将一些标准输入和期望输出文件与单元测试一起存储。

目前我们正在硬编码服务器上文件的路径,但我更希望测试文件(包括输入和期望输出)放在代码仓库的某个地方,这样它们就可以与测试代码一起被保存在源代码控制下。

我遇到的问题是我不确定最好的放置测试文件的位置是哪里,以及如何在nosetest调用每个测试函数时知道该路径。目前,我考虑将测试数据存储在与测试相同的文件夹中,并使用__file__来确定其位置(这样做可行吗?),但我也愿意听取其他建议。

2个回答

6
我认为使用__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'] )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接