File
POJOに参照を挿入する必要がある興味深いシナリオがあります(テストクラスでは、をスタブしFile
て実際にはディスクに何も書き込まないようにするため)が、ファイルの名前は実際には次のようになります。ランタイム:
public class MyPOJO {
private File file;
private FileWriter writer;
// Getter and setter for file & writer
public void writeToDisk(String message) {
String fileName = complexLogicToBuildFileName();
// How do I do the equivalent of: file.setName(fileName);
try {
writer.write(message);
writer.close();
} catch(IOException ioe) {
...
}
}
}
public class MyPOJOTest {
@Test
public void verifyWriteToDiskAttemptsToWrite() {
MyPOJO pojo = new MyPOJO();
File mockFile = Mockito.mock(File.class);
FileWriter mockWriter = Mockito.mock(FileWriter.class);
Mockito.doNothing().when(mockWriter).write(Mockito.anyString());
pojo.setWriter(mockWriter);
pojo.setFile(mockFile);
pojo.writeToDisk("This won't write to disk.");
Mockito.verify(mockWriter).write("This won't write to disk.");
}
}
問題は、コンストラクターが強制されているため、実行する前に、挿入されたインスタンスをファイル名にFile(String)
バインドする必要があり、これを単純なsetterメソッドで上書きできないことです。(テスト容易性のために)プロパティを保持して注入する方法についてのアイデアはありますが、それでもファイルに名前を付けるために使用できますか?前もって感謝します。File
complexLogicToBuildFileName()
file
fileWriter
complexLogicToBuildFileName()