ファイル/ストリーム処理を行うクラスをテストしようとしています。例えば、方法readFile
は、内部のファイルのすべての行と列のArrayList
を返すためにBufferedReader
を使用します。MockitoとBufferedReaderでの練習
public ArrayList<String> readFile(String fileName)
{
ArrayList<String> result = new ArrayList<String>();
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(STORAGE_DIRECTORY+fileName);
br = new BufferedReader(fr);
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
result.add(sCurrentLine);
}
}
catch (FileNotFoundException e) {
return new ArrayList<String>();
} catch (IOException e) {
return new ArrayList<String>();
}
br.close();
fr.close();
return result;
}
しかし、私はbufferedReader
方法「のreadLine()を」モックするために、Mockitoを使用する場合、FileNotFoundException
ですFileReader
コンストラクタのためにスローされます。 temporaryFile
またはMock FileReader
コンストラクタを使用する必要がありますか?
@Test
public void readFileTest5() throws Exception {
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);
FileReader fileReader = Mockito.mock(FileReader.class);
when(BufferedReader.readLine()).thenReturn("abc");
assertEquals("",new ArrayList<String>(), FileUtil.readFile("abc"));
}
は、あなたがあなたのBufferedReader
インスタンスへの入力を模擬する方法がありませんことを意味しFileReader
を模擬する機会がないので、
私の悪い、私はクラスのトップを書く必要があります。 BufferedReaderは、アノテーション(スプリングスタイル)が挿入されたクラスのインスタンスです。 '@MockBean \t private BufferedReader bufferedReader; \t \t @MockBean \t private java.io.FileReader fileReader; \t \t @MockBean \tプライベートファイルファイル。 \t @InjectMocks private com.example.system。FileUtil FileUtil; ' – Nicogo
別のメソッドにバッファ構造を抽出して、そのメソッドをモックして、" readLine "が返す擬似BufferedReaderを返す必要があります。あるいは、おそらく単純なことを模倣しようとしないでください。あなたはリソースリークにはるかに明らかな問題があります。 –
ありがとう、あなたは 'ressource leaks'をどういう意味ですか? – Nicogo