LINUX.ORG.RU

Ответ на: комментарий от deterok

Сделай функцию, которая возвращает такой объект и вызывай её в тестах где надо.

Или тебе сохранять его состояние ещё между тестами?
Тогда сохраняй куда-нибудь снаружи тестовой песочницы.

Goury ★★★★★
()

Решение в лоб: в __init__.py пакета с тестами создать этот объект, а потом импортировать его в нужном месте. Но как уже сказали, в юнит тестах так делать не принято.

У меня была задача запилить тесты на селениуме, где нужно иметь доступ к экземпляру драйвера и ещё куче объектов в каждом тесте. Сначала пришлось сделать примерно так же. Потом перешёл на pytest, куда прикрутил самописный плагин, который решает эту проблему. Потом мне что-то не понравилось и я запилил свою пускалку тестов.

Решение проблемы заключается в том, что есть модуль, назовём его context.py. В этом модуле определён контекстный менеджер, внутри которого проходят все тесты. Перед запуском набора тестов (TestSuite), атрибуты экземпляра этого контекстного менеджера становятся доступны внутри экземпляра набора тестов.

Почему контекстный менеджер, а не простой словарь/объект? Потому что независимо от результата нужно вырубить браузер, остановить сервер, в котором крутится приложение и т.п. Как-то так. Можно конечно было сделать и через try finally, но так красивее. Впрочем, это всё детали.

Так или иначе, придётся выдумывать что-то своё, ИМХО. Я не думаю, что есть какие-то готовые решения. Можно посмотреть, как тестируют в джанге, может быть там что-то интересное будет.

Kilte ★★★★★
()
Последнее исправление: Kilte (всего исправлений: 1)
Ответ на: комментарий от deterok

однако никак - неправильный ответ.

Как правильно сделать неправильно?

redixin ★★★★
()

Тесты должны быть независимы друг от друга, ты же знаешь, да? И причины по которым возникло это требование, ведь тоже знаешь?

prefetch
()

его создавать очень напряжено

И заmock'ать никак?

Тогда, это, похоже, не unittest'ы, а интеграционные (но тебе от этого, не легче).

prefetch
()

Я бы создал ini файлик и читайл из него настройки в каждом нужном месте

Yur4eg ★★
()

<<< С помощью создания отдельного модуля для подобного рода переменных >>>

Заведите отдельный модуль, например, glob

В нем напишите:

myobj = 0

Из любого места программы доступ к этой переменной будет доступен с помощью конструкции:

В модуле a напишите:

import glob

glob.myobj = obj_1

В модуле b напишите:

import glob

obj_2 = glob.myobj

andor
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.