Как я могу хранить данные тестирования для Python NoSetests?
-
03-10-2019 - |
Вопрос
Я хочу написать несколько тестов на Python MFCC. Функция экстрактора для работы с nosetest. Как и некоторые тесты на более низкие уровне, я также хотел бы иметь возможность хранить некоторые стандартные входные и ожидаемые выходные файлы с помощью модульных тестов.
На данный момент мы жестко кодируем пути к файлам на наших серверах, но я бы предпочел файлы тестирования (как входных и ожидаемых выходов), чтобы быть где-то в репозитории кода, чтобы их можно было сохранить под контролем источника, рядом с тестированием код.
Проблема, в которой у меня есть, это то, что я не уверен, что лучшее место для поставления файлов тестирования, и как узнать, что это путь, когда Nosetest вызывает каждую функцию тестирования. На данный момент я думаю хранить данные тестирования в той же папке, что и тесты и использование __file__
Работать там, где это (будет ли это работать?), но я открыт для других предложений.
Решение
Я думаю, что используя __file__
Чтобы выяснить, где тест расположен и хранение данных рядом с тем, что это хорошая идея. Я делаю то же самое для некоторых тестов, которые я пишу.
Этот:
os.path.dirname(os.path.abspath(__file__))
Вероятно, лучшее, что вы собираетесь получить, и это не плохо. :-)
Другие советы
На основе идеи использования __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'] )