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

StackOverflow https://stackoverflow.com/questions/3724072

  •  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'] )
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top