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

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

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

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

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

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

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

2

Решение

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

1

Другие решения

В соответствии с этот ответ на эквивалентный вопрос, ответ:

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

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

0

По вопросам рекламы [email protected]