在 Robolectric 测试中使用 Android KeyStore

Using the Android KeyStore in Robolectric tests

我正在尝试编写一些针对 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();
   }
}

失败并出现以下异常:

org.junit.ComparisonFailure: expected:<null> but was:<java.security.KeyStoreException: AndroidKeyStore not found>

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

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

简而言之:

From java.security.Security javadoc:

The default values of security properties are read from an implementation-specific location, which is typically the properties file lib/security/java.security in the Java installation directory.

…我们可能不想鼓励人们胡闹。

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

尝试 PowerMockito 时也会发生同样的情况。