PowerMockitoのmockStatic機能を使用して静的クラスとメソッドをモックするためのテストケースを作成しました。しかし、私はもう一つの静的メソッドの中で一つの静的メソッドをモックするためにstruglingしています。私はthisを含むいくつかの例を見ましたが、実際に私を助けてくれていないか、実際の機能を理解していませんか? (私は無知です)PowerMockitoモックシングルスタティックメソッドと別のスタティックメソッド内のオブジェクトを返す
例:私は下のようなクラスを持っており、完全なコードはhereです。
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)
を呼び出すとき。 readPublicKey(...)
メソッドの結果を側面encrypt(...)
に偽装できますか?
への実際の呼び出しを模擬するために私をさせる
PowerMockito.stub(PowerMockito.method(OpenPgpUtility.class, "readPublicKey", InputStream.class)).toReturn(mockPGPPublicKey);
?これはあなたが嘲笑すべき方法です。パブリックインターフェイスをモックするので、プライベートメソッドを模擬する必要はありません。 – Turing85
もう一つの静的メソッド 'readPublicKey'を持つ' encrypt'メソッドの動作をテストしています。 – Extreme
そして、なぜ同じクラスのメソッドを模擬しますか? 'readPublicKey(...)'をテストし、 'encrypt(...)'のテストを書くテストを書いてください。それは依然としてテスト中のユニットと同じであるため、モックを使用する必要はありません。モッキングは、外部依存関係を除去するために使用される。データベースまたは未知のインタフェース実装。 – Turing85