Как я могу хранить данные тестирования для носовых тестов python?

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

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

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


person David Dean    schedule 16.09.2010    source источник


Ответы (2)


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

Этот:

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

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

person Arlaharen    schedule 16.09.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'] )
person Rod    schedule 16.09.2010