Va bene, per favore considera il seguente metodo. Permettetemi innanzitutto di dirvi che i miei obiettivi del metodo è determinare se esistono risorse del file system. Questo vuol dire che si tratta di un sito aziendale interno in cui ci si aspetta che la directory di base sia già presente sul server installato e lo stesso con il parametro passato directory e nome file. L'utente finale dell'app Web avrà GIÀ messo in atto le risorse.
Ciò che questo metodo verifica è che tutto funzioni.
MA, come faccio a testarlo? Non voglio testare che le classi JAVA.NIO funzionino, so che lo faranno. Voglio testare che, dato un insieme di input, i miei comportamenti sono quelli che penso che siano.
Come faresti questo?
@Component
public class FilePathTestService {
@Value("${userlists.basedirectory}")
private String userListDirectory;
public FilePathTestResult testFilePath(FilePathTestRequest filePathTestRequest) {
if (StringUtils.isBlank(userListDirectory))
{
return (new FilePathTestResult(
false,
"ERROR: Base userListDirectory is Blank/Null"));
}
try {
Path pathToDirectory = Paths.get(
userListDirectory,
filePathTestRequest.getPathName());
if (!Files.isDirectory(pathToDirectory))
{
return (new FilePathTestResult(
false,
"ERROR: Directory could not be found for this path."));
}
Path pathToFile = Paths.get(
userListDirectory,
filePathTestRequest.getPathName(),
filePathTestRequest.getFileName());
if (Files.notExists(pathToFile))
{
return (new FilePathTestResult(
false,
"ERROR: File could not be found, but directory was found."));
}
else {
File fileInfo = pathToFile.toFile();
FilePathTestResult result = new FilePathTestResult(true);
result.setModifyDate(LocalDateTime.ofInstant(Instant.ofEpochMilli(
fileInfo.lastModified()),
ZoneId.systemDefault()));
return (result);
}
} catch (InvalidPathException e) {
return (new FilePathTestResult(
false,
"ERROR: This path string cannot be converted to a Path"));
}
}
}