у нас в системе есть флаги на каждый поддерживаемый функционал, например есть ли GPS. таких флагов пару сотен.
Каждый тест обернут в декоратор, если флаг включен то тесты требующие GPS выполняются, иначе пропускаются.
Предварительная настройка выполняется перед тестом, например путем установки нужных параметров прямым доступом к системе (white box). Тесты у нас выполняются at runtime, путем рефлексии тестировочный фреймворк подключен к системе.
Тесты выполняются для каждой принципиально отличной конфигурации устройства. например у нас более двадцати принципиально отличных конфигураций. получается простыня такая х тестов на y конфигураций.
конкретно по машинам состояний есть model based testing (при наличии формального описания машины состояний может делать полный ее обход, в теории) есть например
scxml для такого формального описания. однако по этой теме практическим опытом поделиться не могу, за неимением оного
Если есть дополнительные вопросы, пишите.