4

私は、nosetest で実行するための python MFCC機能抽出プログラムのいくつかのテストを書きたいと考えています。いくつかの下位レベルのテストと同様に、単体テストでいくつかの標準入力ファイルと期待される出力ファイルを保存できるようにしたいと考えています。

現時点では、サーバー上のファイルへのパスをハードコーディングしていますが、テスト ファイル (入力と期待される出力の両方) をコード リポジトリのどこかに置いて、テストと並行してソース管理下に置くことをお勧めします。コード。

私が抱えている問題は、テスト ファイルを配置するのに最適な場所がどこにあるかわからないことと、nosetest が各テスト関数を呼び出すときにそのパスが何であるかを知る方法がわからないことです。現時点では、テストデータをテストと同じフォルダーに保存し、それがどこにあるかを調べるために使用__file__することを考えていますが (それはうまくいくでしょうか?)、他の提案も受け付けています。

4

2 に答える 2

5

を使用__file__してテストがどこにあるかを把握し、それと一緒にデータを保存することは良い考えだと思います。私が書いたいくつかのテストでも同じことをしています。

これ:

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

おそらくあなたが得ようとしている最高のものであり、それは悪くありません. :-)

于 2010-09-16T07:05:25.080 に答える
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'] )
于 2010-09-16T20:53:39.937 に答える