2016-04-12 29 views
0

FileReaderコンストラクタでFileInputStreamが作成されていることに気付きました。だから私はFileReaderクラスでそれを擬似するが、それは動作しません。誰もそれを把握できますか?FileReaderのMock FileInputStreamはPowerMockを使用できません

コードそれ以下のように:

package util; 

import java.io.BufferedReader; 
import java.io.ByteArrayInputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import org.junit.Assert; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.Mockito; 
import org.powermock.api.mockito.PowerMockito; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest({ FileReader.class, ContentReader.class}) 
public class FileReaderTest { 

    @Test 
    public void testGetContent() throws Exception { 
     File file = PowerMockito.mock(File.class); 
     InputStreamReader isr = new InputStreamReader(new ByteArrayInputStream("123".getBytes())); 
     PowerMockito.whenNew(InputStreamReader.class) 
       .withArguments(Mockito.any(FileInputStream.class)).thenReturn(isr); 
     Assert.assertEquals("123", ContentReader.getContent(file)); 
    } 

} 

class ContentReader { 

    public static String getContent(File file) throws IOException { 
     String content = "unknown"; 
     BufferedReader in = null; 
     in = new BufferedReader(new FileReader(file)); 
     content = in.readLine(); 
     in.close(); 
     return content; 
    } 

} 
+0

'ContentReader :: getContent'は' PidHelper :: getPidFromFile'と同じですか? – gontard

+0

誰が 'new InputStreamReader'を呼び出しますか? –

+0

@ gontard、はい。そのために残念。私はコード – Linhoo

答えて

0

ショットの答え - 模擬システムクラスにPowerMockは、システムクラスを使用するクライアントのクラスを変更することができるはずですので、それは、不可能です。あなたのケースでは、誰が使うのか、何が使われるのかは、システムクラスです。あなたはhereを読むことができます(これはシステムクラスの静的呼び出しに関するものですが、コンストラクタコールの呼び出しについても同じです)

また、この良い点を確認してください:don't mock what you don't own。あなたのためにそれは意味:あなたは

  • があなたのutilクラスのための統合テストを書くことができますモックutilのクラスを経由してファイルからのデータ読み出しをラップする必要があります

    • ContentReader がutilクラスの場合、ユニットテストを書くべきではありません。
  • 関連する問題