Как я могу протестировать специфичный для Windows код в Linux?

#python #pytest #pywin32 #github-actions

#python #pytest #pywin32 #github-действия

Вопрос:

Основной частью пакета, который я разрабатываю, является запись и чтение с нескольких цифровых сигнальных процессоров. Связь с DSP обрабатывается с помощью COM-объектов из PyWin32 API.

Теперь, очевидно, это не сработает при тестировании кода на компьютере с Linux, и я не могу проверить, работает ли чтение в DSP, если его нет. Тем не менее, я хотел бы протестировать оставшийся код вокруг чтения / записи.

Например, у меня есть подпрограмма, которая обрабатывает некоторый сигнал и записывает его в DSP, а затем позже считывает из этого DSP и сохраняет прочитанные данные. Я хочу протестировать эту процедуру без фактического использования COM-объекта для отправки данных в DSP.

Один из способов, о котором я думал, — это написать новый класс, который имитирует ожидаемое поведение COM-объекта для каждого метода, но это займет много времени. Есть ли более простой способ протестировать код, включающий специфичную для ОС функцию, на «неправильной» ОС?

Комментарии:

1. Рассматривали ли вы виртуальные машины?

2. Не могли бы вы подробнее объяснить, что означает использование виртуальной машины для тестирования и как это применимо к github-workflows, или указать мне на некоторые ресурсы, объясняющие концепцию?

3. Похоже, проблема заключается как в отсутствии DSP, так и в разнице в ОС. Если это правда, я не вижу, чтобы виртуальная машина сильно помогала. Если бы это было полезно, Docker мог бы быть лучшей альтернативой, но он не будет лучше решать проблему отсутствия DSP для тестирования.

4. @Steve это правильно — событие, если бы у DSP был совместимый с Linux API, у меня была бы та же проблема. Итак, я в основном должен имитировать DSP?

5. Что ж, если у вас есть исходный код для DSP-кода, возможно, это, по крайней мере, даст вам отправную точку для удаления всего. Я не могу представить, что ваш код использует так много вызовов. Похоже, возможно, вам нужно просто стиснуть зубы. И тогда я бы порекомендовал Docker запустить ваш тест. Я недавний пользователь OMG Docker. Удивительно, насколько контейнеры Docker лучше, чем виртуальные машины. Или Vagrant, если вы хотите пойти по маршруту виртуальной машины. Я могу помочь вам с любым из них, если вы хотите. На самом деле это просто.