-2
FileOutputStreamをモックしようとしていますが、FileからisInvalidメソッドをモックできないため、NullPointer Exceptionで失敗します。 まず私はモックとしたいコード:FileOutputStreamを黙って
FileOutputStream fos = null;
fos = createFileOutputStream(file)
を...
public FileOutputStream createFileOutputStream(File clsFile) throws FileNotFoundException
{
return new FileOutputStream(clsFile);
}
マイに関するモック:
File clsFile = Mockito.mock(File.class);
Mockito.when(clsUnitUnderTest.createNewFile(strTargetPath + "XXX" + strTargetFileName)).thenReturn(clsFile);
Mockito.when(clsFile.exists()).thenReturn(true);
Mockito.when(clsFile.createNewFile()).thenReturn(true);
Mockito.when(clsFile.renameTo(new File(strTargetPath + strTargetFileName))).thenReturn(false);
Mockito.when(clsFile.getPath()).thenReturn(strTargetPath + "XXX" + strTargetFileName);
// Mockito.when(clsFile.isInvalid).thenReturn(false); not working because isInvalid is final!!
FileOutputStream clsFileOutputStream = Mockito.mock(FileOutputStream.class);
Mockito.when(clsUnitUnderTest.createFileOutputStream(clsFile)).thenReturn(clsFileOutputStream);
私は、最終的な方法isInvalidを模擬する方法はありません知っています。しかし、PowerMokitoを使用せずにこれを修正する別の方法がありますか?
また、mockの代わりにspyをclsFileOutputStreamに使用しようとしましたが、0 argsのコンストラクタがないため、これは機能しません。あなたはOutputStream
代わりの
public class MyClass {
public FileOutputStream createFileOutputStream(File clsFile) throws FileNotFoundException
{
return new FileOutputStream(clsFile);
}
void doSomething(File file) {
// process file
....
FileOutputStream str = createFileOutputStream(file);
// process stream
}
}
でFileOutputStream
を交換しようとすることができます
なぜあなたは最初にうまく動作するJDKクラスのテストを記述しますか? –
@ M.Prokhorov私はFileまたはFileOutputStreamをテストしていません。私は自分のプログラムでそれらを使用し、彼らがうまく動作するので、それらを嘲笑したい。他のコードをテストすることはより重要です。したがって、私はFileとFileOutputStreamを簡単に操作する必要があります。 – Ganymed
このテストでは、実際には模擬できないものを模倣する能力に依存しているようです。私は、その部分、またはリファクタの統合テストを書くことを提案して、プロセスでJDKの半分をモックする必要はありません。 –