Подтвердить что ты не робот

SecurityProvider в тестах Mockito при работе вместе с Robolectric

У нас есть проект Android, в котором мы используем MockitoTestRunner и RobolectricTestRunner для разных видов тестов.

Я написал набор из unit test, который связан с SSL, загрузив certs/keystores/truststores и т.д. Для этого я использовал MockitoJUnitRunner и программным путем добавил провайдера Bouncycastle:

Security.insertProviderAt(new BouncyCastleProvider(), 1);

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

Но, когда я запускаю указанные тесты по боковому ANY-тесту, который использует RobolectricTestRunner (например, если я просто запускаю все тесты в моем проекте вместе перед фиксацией), я получаю следующее исключение:

java.io.IOException: error constructing MAC:
java.lang.SecurityException: JCE cannot authenticate the provider BC

Я озадачен. Как тестирующее средство, используемое в одном тестовом классе, влияет на запуск других классов, особенно если мы используем другой тестовый бегун?


Дополнительная информация:

  • Исключение возникает только после того, как я действительно попытаюсь сделать что-то с провайдером BC (например, первый раз, когда тест пытается загрузить сертификат PKCS12) - сам вызов insertProviderAt(...) проходит отлично...
  • Кроме того, когда я распечатываю список поставщиков для каждого тестового прогона, я вижу, что у Robolectric уже есть поставщик BC, но он все еще терпит неудачу, когда я пытаюсь его использовать.
  • Кроме того, если я не не добавляю поставщика BC, тесты все равно терпят неудачу с той же ошибкой при запуске в тестовом комплекте наряду с Robolectric test. Когда они выполняются в одиночку, они терпят неудачу с java.security.NoSuchProviderException: no such provider: BC, поскольку мы явно указываем провайдера.
4b9b3361