У меня есть интересный сценарий, где мне нужно ввести ссылку File
в мой POJO (так что в моих тестовых классах я могу заглушить File
и не писать что-нибудь на диск), но имя файла не будет на самом деле известно только во время выполнения:Как вставить java.io.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)
конструктора, я должен связать свой впрыскиваются File
экземпляра к имя файла до У меня есть шанс выполнить complexLogicToBuildFileName()
, и это не может быть перезаписано простой метод сеттера. Любые идеи относительно того, как я мог бы сохранить file
и fileWriter
как внедренные свойства (для проверки), но все же позвольте мне использовать complexLogicToBuildFileName()
, чтобы назвать файл? Заранее спасибо.