2017-05-18 4 views
0

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(...)に偽装できますか?

+0

への実際の呼び出しを模擬するために私をさせる

PowerMockito.stub(PowerMockito.method(OpenPgpUtility.class, "readPublicKey", InputStream.class)).toReturn(mockPGPPublicKey);

?これはあなたが嘲笑すべき方法です。パブリックインターフェイスをモックするので、プライベートメソッドを模擬する必要はありません。 – Turing85

+0

もう一つの静的メソッド 'readPublicKey'を持つ' encrypt'メソッドの動作をテストしています。 – Extreme

+0

そして、なぜ同じクラスのメソッドを模擬しますか? 'readPublicKey(...)'をテストし、 'encrypt(...)'のテストを書くテストを書いてください。それは依然としてテスト中のユニットと同じであるため、モックを使用する必要はありません。モッキングは、外部依存関係を除去するために使用される。データベースまたは未知のインタフェース実装。 – Turing85

答えて

0

SOFの解決策が誰かのpostに見つかりました。

私の場合、PowerMockitoと同じ部分模擬を以下のように使っています。 readPublicKey()しかし、テスト使用の下で、あなたのクラスを何方法encrypt()

関連する問題