我正在尝试编写一些针对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 。
答案 0 :(得分:6)
https://github.com/robolectric/robolectric/issues/1518已经就此进行了讨论。
简而言之:
来自java.security.Security javadoc:
从a中读取安全属性的默认值 特定于实现的位置,通常是属性 Java安装目录中的文件lib / security / java.security。
......我们可能不想鼓励人们瞎逛。
看起来这需要是方法拦截规则...
尝试使用PowerMockito时会发生同样的情况。