Исключение с использованием SpringRunner с PowermockRunner

Я пытаюсь протестировать API JavaMail и использовать SpringRunner и PowerMockRunner, но это не удается.

@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringRunner.class)
@PowerMockIgnore(value = {"javax.management.*"})
@SpringBootTest
public class BaseITest {

  @PrepareForTest(value = {MyStaticHelper.class})
  @Test
  public void testListFolders() {
     // mock static method
     // Use JavaMail API
  }
}

Я получаю это исключение:

javax.mail.MessagingException: java.security.NoSuchAlgorithmException: class configured for SSLContext: sun.security.ssl.SSLContextImpl$DefaultSSLContext not a SSLContext

Если я удалю @PowerMockIgnore(value = {"javax.management.*"}), я получаю это исключение:

Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/powermock/core/classloader/MockClassLoader) previously initiated loading for a different type with name "javax/management/MBeanServer"

Используемые версии зависимостей:

  • powermock-api-mockito: 1.7.1
  • powermock-модуль-junit4: 1.7.1
  • мокито-все: 2.0.2-бета
  • мокито-ядро: 2.8.9

Кто-нибудь может помочь?


person Abhishek Kumar    schedule 12.05.2018    source источник
comment
Не решение, но теперь вы столкнулись с проблемой использования PowerMockito. По моему опыту, лучше создать тестируемый код без использования PowerMock, чем пытаться исправить этот тип ошибки (я получил несколько ошибок байт-кода, дал большое НЕТ! и захлопнул @Ignore на тестах..)   -  person Tobb    schedule 23.05.2018
comment
Вы пробовали игнорировать оба? @PowerMockIgnore (значение = {javax.management.*, sun.security.ssl.*}). У меня была очень похожая проблема, и это сработало для меня. См. этот другой вопрос SO, возможно, это поможет.   -  person troig    schedule 23.05.2018
comment
@Tobb Я попытаюсь удалить эти зависимости, если ничего не получится   -  person Abhishek Kumar    schedule 23.05.2018
comment
@troig Я пробовал это   -  person Abhishek Kumar    schedule 23.05.2018


Ответы (2)


Это похоже на ошибку.

Решение, которое помогло в моем случае, заключалось в сужении загруженных конфигураций.

Попробуйте указать минимальный набор конфигураций для загрузки:

@SpringBootTest(classes = SomeSpesificConfiguration.class)
person Sasha Shpota    schedule 23.05.2018
comment
Можете ли вы быть конкретным. Мне нужно запустить интеграционный тест с использованием API-интерфейсов JavaMail, т. Е. Я должен создать правильное TCP-соединение (SSL), и здесь что-то не получается. - person Abhishek Kumar; 23.05.2018

  1. Используйте powermock-api-mockito2

  2. Попробуйте @PowerMockIgnore("javax.net.ssl.*") https://groups.google.com/forum/#!topic/powermock/v4nreP2AnOQ

person chandra    schedule 29.05.2018