我已经编写了测试用例,使用PowerMockito的mockStatic功能模拟静态类和方法。但我正在努力模拟另一个静态方法内部的一个静态方法。我确实看到了一些例子,包括这个,但它们中没有一个真正帮助我或者我没有理解实际的功能?(我一无所知)。
例如,我有一个如下的类,完整代码在这里。
当我调用
例如,我有一个如下的类,完整代码在这里。
public static byte[] encrypt(File file, byte[] publicKey, boolean verify) throws Exception {
//some logic here
PGPPublicKey encryptionKey = OpenPgpUtility.readPublicKey(new ByteArrayInputStream(publicKey));
//some other logic here
}
public/private static PGPPublicKey readPublicKey(InputStream in) throws IOException, PGPException {
//Impl of this method is here
}
我的测试用例是:
@Test
public void testEncrypt() throws Exception {
File mockFile = Mockito.mock(File.class);
byte[] publicKey = { 'Z', 'G', 'V', 'j', 'b', '2', 'R', 'l', 'Z', 'F', 'B', 'L', 'Z', 'X', 'k', '=' };
boolean flag = false;
PGPPublicKey mockPGPPublicKey = Mockito.mock(PGPPublicKey.class);
InputStream mockInputStream = Mockito.mock(InputStream.class);
PowerMockito.mockStatic(OpenPgpUtility.class);
PowerMockito.when(OpenPgpUtility.readPublicKey(mockInputStream)).thenReturn(mockPGPPublicKey);
System.out.println("Hashcode for PGPPublicKey: " + OpenPgpUtility.readPublicKey(mockInputStream));
System.out.println("Hashcode for Encrypt: " + OpenPgpUtility.encrypt(mockFile, publicKey, flag));
}
当我调用
OpenPgpUtility.encrypt(mockFile, publicKey, flag)
方法时,实际上并没有调用该方法。
如何在 encrypt(...)
方法内模拟 readPublicKey(...)
方法的结果?
encrypt
方法的行为,该方法具有另一个静态方法readPublicKey
。 - ExtremereadPublicKey(...)
,并编写encrypt(...)
的测试。它仍然是相同的被测试单元,因此不应使用模拟。模拟用于消除对外部依赖项(例如数据库或未知接口实现)的影响。 - Turing85readPublicKey
,那么很可能一些对两个方法的测试将变为红色。 - Turing85