Как я могу хранить данные тестирования для тестов носа Python? - PullRequest
3 голосов
/ 16 сентября 2010

Я хочу написать несколько тестов для экстрактора Python MFCC для работы с тестом на нос. Помимо некоторых низкоуровневых тестов, я также хотел бы иметь возможность хранить некоторые стандартные входные и ожидаемые выходные файлы вместе с модульными тестами.

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

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

Ответы [ 2 ]

5 голосов
/ 16 сентября 2010

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

Это:

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

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

0 голосов
/ 17 сентября 2010

Исходя из идеи использования __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'] )
...