在Robolectric测试中使用Android KeyStore

jac*_*ine 6 java android robolectric android-keystore

我正在尝试编写一些针对Android Keystore的测试用例.但是,当我编写以下测试用例时:

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
public class FancyPantsUnitTest {
   @Test
   public void buildKey() {
        keyPairGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
        keyPairGenerator.initialize(4096);
        final KeyPair keyPair = keyPairGenerator.generateKeyPair();
   }
}
Run Code Online (Sandbox Code Playgroud)

这失败,出现以下异常:

org.junit.ComparisonFailure: expected:<null> but was:<java.security.KeyStoreException: AndroidKeyStore not found>
Run Code Online (Sandbox Code Playgroud)

如果有帮助,我的目标是API等级23.

mar*_*dan 6

已经在https://github.com/robolectric/robolectric/issues/1518上对此进行了讨论.

简而言之:

来自java.security.Security javadoc:

安全属性的默认值是从特定于实现的位置读取的,该位置通常是Java安装目录中的属性文件lib/security/java.security.

...我们可能不想鼓励人们跟你一起玩.

看起来这需要一个方法拦截规则......

尝试使用PowerMockito时会发生同样的情况.

  • 我还是不明白。有没有办法同时使用 Robolectric 和 KeyStore? (5认同)
  • 对于其他来到这里的人。这篇文章帮助我测试 EncryptedSharedPreferences。https://proandroiddev.com/testing-jetpack-security-with-robolectric-9f9cf2aa4f61 (3认同)