Есть ли способ сообщить Cargo о проведении тестов на основной теме?

Я пытаюсь создать библиотеку обработки изображений на основе OpenGL с GLFW, и ее нужно тестировать. К сожалению, я столкнулся с этой ошибкой - GLFW нуждается в своих функциях инициализации, которые будут вызываться из основного потока, но тесты Cargo выполняются в фоновом потоке.

Ответ 1

Нет, насколько мне известно, сейчас это нелегко. Существует аргумент --test-threads, который вы можете передать тестовому жгуту, но он устанавливает количество потоков в дополнение к основному потоку. Таким образом, --test-threads=1 покажет еще два потока.


Таким образом, вы не можете использовать стандартную тестовую проводку. К счастью, вы можете отключить его в Cargo.toml. Возможно, лучшим решением является создание новой папки (например, gltests) и размещение всех тестов, которые необходимо запустить в основном потоке. Тогда нам просто нужно объявить те тесты в Cargo.toml:

[[test]]
name = "gltests"
path = "gltests/main.rs"
harness = false

Это означает, что груз попытается скомпилировать gltests/main.rs в качестве исполняемого файла (ожидание функции main()) и выполнить этот исполняемый файл, когда вы скажете cargo test. Таким образом, вы не получите ни малейшего вывода, который вы обычно получаете от грузовых испытаний. Вам просто нужно сделать все самостоятельно в main.rs, но по крайней мере вы можете начать тесты в основном потоке.