代码之家  ›  专栏  ›  技术社区  ›  David Dean

我如何为python nose测试存储测试数据?

  •  3
  • David Dean  · 技术社区  · 14 年前

    我想为Python编写一些测试 MFCC 用于与NoseTest一起运行的功能提取程序。除了一些较低级别的测试之外,我还希望能够用单元测试存储一些标准的输入和预期的输出文件。

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

    我面临的问题是,我不确定放置测试文件的最佳位置,以及如何知道NoseTest调用每个测试函数时的路径。目前,我正在考虑将测试数据存储在与测试相同的文件夹中,并使用 __file__ 去弄清楚那在哪里(这行吗?)但是我愿意接受其他的建议。

    2 回复  |  直到 14 年前
        1
  •  5
  •   Arlaharen    14 年前

    我觉得用 __file__ 找出测试的位置并将数据存储在它旁边是一个好主意。对于我写的一些测试,我也在做同样的工作。

    这是:

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

    可能是你能得到的最好的,那也不错。-)

        2
  •  0
  •   Rod    14 年前

    基于使用的理念 __file__ ,也许您可以使用一个模块来帮助构建路径。您可以找到模块目录中包含的所有文件,在字典中收集它们的名称和路径,以供以后使用。

    创建一个可供测试访问的模块,即除了测试之外的一个目录,例如test data,您可以在其中放置数据文件。在 __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'] )