tl; dr - Я хочу написать функцию Python unittest
, которая удаляет файл, запускает тест и восстанавливает файл. Это вызывает условия гонки, так как unittest
выполняет несколько тестов параллельно, а удаление и создание файла для одного теста противоречит другим тестам, которые происходят одновременно.Выполнение модульного теста Python, который никогда не работает параллельно
Long Конкретный пример:
У меня есть модуль Python с именем converter.py
и это связано тесты в test_converter.py
. Если есть файл с именем config_custom.csv
в том же каталоге, что и converter.py
, тогда будет использована настраиваемая конфигурация. Если нет настраиваемого конфигурационного файла CSV, тогда есть конфигурация по умолчанию, встроенная в converter.py
.
Я написал модульный тест, используя unittest
из стандартной библиотеки Python 2.7 для проверки этого поведения. Единичный тест в setUp()
переименует config_custom.csv
в wrong_name.csv
, затем он будет запускать тесты (надеюсь, используя конфигурацию по умолчанию), а затем в tearDown()
он переименует файл так, как он должен быть.
Задача: Испытания модуля Python выполняются параллельно, и я получил ужасные условия гонки. Файл config_custom.csv
будет переименован в середине других модульных тестов недетерминированным способом. Это приведет к по меньшей мере одной ошибке или ошибке примерно в 90% случаев, когда я запустил весь тестовый пакет.
Идеальное решение было бы сказать unittest
: НЕ ПРОДАЕТСЯ этот тест параллельно с другими тестами, этот тест является особым и требует полной изоляции.
Моей совместной работой является добавление необязательного аргумента функции, которая ищет файлы конфигурации. Аргумент передается только тестовым набором. Он игнорирует файл конфигурации, не удаляя его. Фактически удаление тестового файла более изящно, вот что я действительно хочу проверить.