Python3.6 и синглтоны - вариант использования и параллельное выполнение - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть несколько юнит-тестов (только python3.6 и выше), которые импортируют вспомогательный класс для настройки некоторых вещей (например, извлечения некоторых образов Docker) в системе перед началом тестов.

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

Вызов класса помощника очень дорог, и я хочу ускорить свои тесты класса помощника только один раз.Мой подход заключается в использовании синглтона, но мне сказали, что в большинстве случаев синглтон не нужен.Есть ли другие варианты для меня или синглтон здесь действительно хорошее решение?Опция должна позволять выполнять все тесты вообще и каждый тест самостоятельно.

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

1 Ответ

0 голосов
/ 22 апреля 2019

Я могу дать ответ только на часть вашего вопроса «есть ли для меня другие варианты» ...

Использование такой сложной настройки для юнит-тестов (получение изображений докера и т. Д.)вызывает у меня подозрение:

Это может означать, что ваши тесты на самом деле являются интеграционными, а не юнит-тестами.Это может быть прекрасно, если ваша цель - найти ошибки во взаимодействиях между вовлеченными компонентами или во взаимодействии между вашим кодом и его системной средой.(Тот факт, что в вашей настройке используются образы Docker, создается впечатление, что вы намереваетесь протестировать тестируемую систему на соответствие системной среде.) Если это так, я желаю вам удачи, чтобы ответить на другие аспекты вашего вопроса (распараллеливаниетесты, синглтоны и безопасность потоков).Возможно, имеет смысл пометить ваш вопрос как «интеграционное тестирование», а не «юнит-тестирование», чтобы привлечь соответствующих экспертов.

С другой стороны, ваши сложные настройки могут указывать на то, что ваш модуль-тесты еще не спроектированы должным образом и / или тестируемая система еще не спроектирована так, чтобы ее можно было легко тестировать с помощью модульных тестов: модульные тесты сосредоточены на тестируемой системе изолированно - изоляция от зависимых компонентов, нотакже изоляция от специфики системной среды.Для таких тестов должным образом изолированной тестируемой системы сложная настройка с использованием Docker не понадобится.

Если последнее верно, вы могли бы получить пользу от ознакомления с такими темами, как «насмешка», «внедрение зависимостей»"или" инверсия управления ", которая поможет вам спроектировать тестируемую систему и ваши тестовые примеры так, чтобы они не зависели от системной среды.Тогда ваши сложные настройки больше не будут нужны, и другие аспекты вашего вопроса (синглтон, распараллеливание и т. Д.) Могут больше не иметь значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...