#python #python-3.x #pytest
Вопрос:
Я новичок в pytest и создаю первую версию набора тестов для библиотеки bsl. Я хотел добавить тест, чтобы проверить, выдается ли конкретное сообщение журнала предупреждений, но, похоже, оно не работает.
Тестовый код:
def test_record_dir_setter(tmp_path, caplog):
"""Test changing the record dir before and during an on-going recording."""
stream = 'StreamPlayer'
with Stream(stream, sample):
recorder = StreamRecorder(record_dir=Path.cwd())
recorder.record_dir = tmp_path
recorder.start(fif_subdir=False, blocking=True, verbose=False)
with caplog.at_level(logging.WARNING):
recorder.record_dir = Path.cwd()
assert 'during an ongoing recording' in caplog.text
eve_file = recorder.eve_file
time.sleep(2)
recorder.stop()
Идея заключается в том , что после .start()
вызова метода вы больше не сможете изменять record_dir
каталог, в котором сохранена запись.
record_dir
способ установки:
@record_dir.setter
def record_dir(self, record_dir):
if self._state.value == 1:
logger.warning(
'The recording directory cannot be changed during an '
'ongoing recording.')
else:
self._record_dir = StreamRecorder._check_record_dir(record_dir)
С logger
тем, чтобы быть регистратором библиотеки BSL.
Тест дает мне сбой с:
СБОЙ gitbsl-форкbslstream_recorderтестыtest_stream_recorder.py::test_record_dir_setter
- Ошибка утверждения: утверждение «во время текущей записи» в «
Есть идеи, почему выходные данные устройства для записи журнала пусты?
РЕДАКТИРОВАТЬ: Забыл упомянуть; задействована многопроцессорная обработка (что является вероятной причиной). Диспетчер контекста Stream
создает поток в другом процессе. Метод регистратора start
создает экземпляр в другом процессе. Однако вызываемый сеттер record_dir
не является частью этого дополнительного экземпляра и должен присутствовать в основном процессе.