使用PowerMockito模拟Keystore.getInstance不返回模拟

时间:2018-08-04 04:10:20

标签: java unit-testing powermockito

我正在测试一个Keystore类中调用各种静态方法和实例方法的方法,我想模​​拟这些方法,但是即使我使用PowerMockito并遇到了很多麻烦,也遇到了麻烦那里。我模拟了KeyStore.getInstance以返回KeyStore类的模拟实例,然后模拟了load方法的行为。但是,我得到了IOException无效的密钥库格式,并且使用调试器可以看到KeyStore.getInstance没有返回该类的模拟实例。任何帮助将不胜感激。

这是我的考试:

@RunWith(RobolectricTestRunner.class)
@PrepareForTest({KeyStore.class})
public class MyTest {
    @Rule
    public PowerMockRule rule = new PowerMockRule();

    ...

    private static final String TEST_PASSWORD = "secret";
    private KeyStore mockKeyStore;

    private TestClass sut = new TestClass();

    public void testMethodA() {
        mockKeyStore = PowerMockito.mock(KeyStore.class);

        PowerMockito.mockStatic(KeyStore.class);
        PowerMockito.when(KeyStore.getInstance(any(String.class))).thenReturn(mockKeyStore);
        doNothing().when(mockKeyStore).load(any(InputStream.class), eq(TEST_PASSWORD.toCharArray()));
        //other setup

        sut.methodA();
    }
}

methodATestClass

public void methodA() {
    ...
    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    ...
    keyStore.load(fis, password);
    ...
}

1 个答案:

答案 0 :(得分:0)

找到了一种解决方法,在this post上给出的模拟KeyStoreSpi的答案可以解决问题。