2016-10-22 4 views
3

Я использую в своем проекте Dagger2, KeyStoreKeyGenerator (из in.co.ophio.secure), и я хочу использовать Robolectric для проверки моего фрагмента.Robolectric KeyStoreKeyGenerator

Я вставляю презентатор в свой фрагмент. Презентатор вводит userPrefs. UserPrefs имеют KeyStoreKeyGenerator реализованы

class UserPreferences(val application: App) : UserPreferencesAPI { 
// another methods and fields 
    private val keyGenerator = KeyStoreKeyGenerator.get(application, application.packageName) 
} 

это мой ведущий

class MainPresenter(..., 
         val sharedPreference: UserPreferencesAPI) 

и это мой тест

private MainFragment fragment; 
private MainActivity activity; 

@Before 
public void setUp() { 
    activity = Robolectric.buildActivity(MainActivity.class).create().start().resume().get(); 
    fragment = MainFragment.Companion.newInstance(); 
} 

@Test 
public void shouldBeNotNull() { 
    Assertions.assertThat(activity).isNotNull(); 
} 

После запуска теста я вижу:

java.lang.NullPointerException 
    at android.security.KeyStore.isHardwareBacked(KeyStore.java:318) 
    at android.security.KeyChain.isBoundKeyAlgorithm(KeyChain.java:397) 
    at in.co.ophio.secure.core.KeyStoreKeyGenerator.<init>(KeyStoreKeyGenerator.java:41) 
    at in.co.ophio.secure.core.KeyStoreKeyGenerator.get(KeyStoreKeyGenerator.java:56) 
    at unofficial.coderoid.wykop.newapp.utils.UserPreferences.<init>(UserPreferences.kt:24) 

Должен ли я создать shadow KeyStoreKeyGenerator? Должен ли я класть класс KeyStore с помощью интерфейса?

ответ

1

мне удается решить путем написания пользовательских тень http://robolectric.org/custom-shadows/

@Implements(android.security.KeyChain.class) 
public class KeyChainShadow { 
    @RealObject 
    private KeyChain keyChain; 


    @Implementation 
    public static boolean isBoundKeyAlgorithm(String algorithm) { 
     return false; 
    } 

} 

не забудьте аннотировать тест с

@Config(shadows = KeyChainShadow.class) 
Смежные вопросы