Когда я тестирую ниже, используя MockitoJunitRunner, он отлично работает, как и ожидалось. Но когда я бегу тот же тест с использованием PowerMockRunner я получаю следующее исключение:EncryptionInitializationException с использованием PowerMockRunner, а не с MockitoJUnitRunner
org.jasypt.exceptions.EncryptionInitializationException:
java.security.NoSuchAlgorithmException: PBEWithMD5AndDES SecretKeyFactory not available
functionToBeTested() {
Encryptor.encrypt(this.getIgvToken(), "IGVKEY123");
}
Я задаюсь вопросом, почему он бросает исключение, когда я используйте PowerMockRunner. Вот моя зависимость:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.6.5</version>
</dependency>
PowerMockRunner использует свой собственный загрузчик классов, поэтому он может переписать байт-код класса испытуемый. Моя догадка заключается в том, что, используя различный загрузчик классов, вы мешаете загрузке SecretKeyFactory. Я просто не знаю достаточно о PowerMock или его иерархии загрузчика классов, чтобы быть уверенным в этом. –
Добавлена аннотация ** @ PrepareForTest ({Encryptor.class}) **. Я просто добавил ClassUnderTest.class; в результате он потерпел неудачу. Также необходимо добавить Encryptor.class. – ashy143
Рад слышать! Подумайте о том, чтобы добавить это как ответ на свой собственный вопрос, а затем принять его, чтобы пометить ваш вопрос как разрешенный. Другие читатели могут даже проголосовать за это позже! –