在 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 时也会发生同样的情况。
我正在尝试编写一些针对 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 时也会发生同样的情况。