2016-11-15 11 views
0

Когда я тестирую ниже, используя 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> 
+1

PowerMockRunner использует свой собственный загрузчик классов, поэтому он может переписать байт-код класса испытуемый. Моя догадка заключается в том, что, используя различный загрузчик классов, вы мешаете загрузке SecretKeyFactory. Я просто не знаю достаточно о PowerMock или его иерархии загрузчика классов, чтобы быть уверенным в этом. –

+1

Добавлена ​​аннотация ** @ PrepareForTest ({Encryptor.class}) **. Я просто добавил ClassUnderTest.class; в результате он потерпел неудачу. Также необходимо добавить Encryptor.class. – ashy143

+0

Рад слышать! Подумайте о том, чтобы добавить это как ответ на свой собственный вопрос, а затем принять его, чтобы пометить ваш вопрос как разрешенный. Другие читатели могут даже проголосовать за это позже! –

ответ

0

Кроме класса испытываемой также добавить аннотации @PrepareForTest({Encryptor.class}).