Как сделать модульные тесты python всегда искать файлы тестовых данных при запуске из разных рабочих каталогов? - программирование
Подтвердить что ты не робот

Как сделать модульные тесты python всегда искать файлы тестовых данных при запуске из разных рабочих каталогов?

Это вопрос настройки тестовой среды.

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

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

f = open('test_data.ext', 'r')

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

Как люди обычно решают эту проблему?

4b9b3361

Ответ 1

Приходят в голову несколько разных способов:

  • Задайте переменную окружения для вашего каталога данных
  • Напишите небольшой модуль, который вы всегда импортируете, который имеет единственную цель иметь фиксированную позицию относительно вашего каталога данных, а затем вызывать __file__ оттуда
  • Генерировать данные во время выполнения
  • Храните данные в базе данных, а не в файле
  • Храните данные в фиксированном месте в файловой системе, а не в местоположении относительно пакета.
  • Не запускайте свой тестовый код напрямую.

Решение, наиболее подходящее для вас, зависит от вашей среды и ваших конкретных данных и программы.

Ответ 2

Я не уверен, что это ваше полное решение, но для модульного тестирования в Python я всегда использую Nose. Он имеет отличную процедуру тестирования. Здесь вы можете найти его механизм . Возможно, вы также можете попробовать использовать традиционное модульное тестирование Python.

py.test также использует аккуратный механизм обнаружения.