2010-09-16 4 views
2

Я хочу написать несколько тестов для функции выделения python MFCC для работы с nosetest. Как и некоторые тесты более низкого уровня, я также хотел бы иметь возможность хранить некоторые стандартные входные и ожидаемые выходные файлы с модульными тестами.Как хранить данные тестирования для nosetests python?

В настоящий момент мы жестко кодируем пути к файлам на наших серверах, но я бы предпочел, чтобы файлы тестирования (как входные, так и ожидаемые-выходные) были где-то в репозитории кода, чтобы они могли храниться под источником контроль вместе с кодом тестирования.

Проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, где лучше всего разместить тестовые файлы, и как узнать, что это за путь, когда nosetest вызывает каждую функцию тестирования. На данный момент я собираюсь хранить данные тестирования в той же папке, что и тесты, и использовать __file__, чтобы определить, где это (будет ли это работать?), Но я открыт для других предложений.

ответ

4

Я думаю, что используя __file__, чтобы выяснить, где находится тест и хранить данные вместе с ним, это хорошая идея. Я делаю то же самое для некоторых тестов, которые я пишу.

Это:

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

, вероятно, лучшее, что вы собираетесь получить, и это не плохо. :-)

0

Основываясь на идее использования __file__, возможно, вы могли бы использовать модуль, чтобы помочь с построением пути. Вы можете найти все файлы, содержащиеся в каталоге модуля, соединить их имя и путь в dictionnary для последующего использования.

Создайте модуль, доступный для ваших тестов, то есть каталог, помимо вашего теста, например 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'])