Предотвращает ли автоматическая регистрация в Google Test статический порядок инициализации?

При использовании Google Test с C++11, если тесты определены для отдельных модулей компиляции, уязвим ли механизм автоматической регистрации для статического порядка инициализации?

Если нет, то почему нет?

ИЗМЕНЕНО ДЛЯ ДОБАВЛЕНИЯ:

В частности: насколько я понимаю, стандарт позволяет инициализировать статические члены тестовых классов в других единицах компиляции после входа в main(),

UnitTest::GetInstance() метод гарантирует, что UnitTest реестр создается при первом доступе. Но что останавливает этот первый доступ, так это вызов основного Run() метод из main()До того, как какие-либо тесты будут зарегистрированы?

Возможно, ключ в том, что они являются статическими членами класса, а не статическими свободными переменными?

2 ответа

Согласно этому ответу на эквивалентный вопрос, ответ:

Да, механизм автоматической регистрации в Google Test уязвим к фиаско статического порядка инициализации.

Если тесты определены в других единицах компиляции, зарегистрированы ли они ранее RUN_ALL_TESTS() вызывается зависит от конкретного поведения компилятора.

Каждый TEST макрос раскрывается в тестовый класс со статическим полем, которое будет инициализировано с помощью вызова MakeAndRegisterTestInfo() который получит доступ к реестру тестов в статической переменной в функциональной области в UnitTest::GetInstance(), Эта переменная будет инициализирована при первом использовании, и реестр тестов будет правильно регистрировать тесты один за другим, даже если порядок регистрации тестов не определен, поскольку они регистрируются при инициализации соответствующих статических полей.

Другие вопросы по тегам