A mio modesto parere, l'approccio migliore qui è avere una configurazione interna ed esterna. La configurazione interna contiene tutti i valori predefiniti e sarà contenuta nella cartella delle risorse. La configurazione esterna è un file delle proprietà distribuito con il tuo programma che viene letto successivamente e sostituisce qualsiasi valore predefinito.
Per i test, è bello perché hai già tutto il necessario per eseguire il programma senza alcuna configurazione aggiuntiva. In produzione, è possibile sostituire uno o più valori come necessario senza riscrivere il programma. Vedi sotto per un esempio su come caricare la configurazione:
private static Properties getConfiguration() throws IOException {
final Properties configProperties = new Properties();
// Attempt to read internal configuration
InputStream configStream = null;
try {
configStream = Main.class.getResourceAsStream("/configuration.properties");
if(configStream != null) {
configProperties.load(configStream);
}
} finally {
if(configStream != null) {
configStream.close();
}
configStream = null;
}
// Attempt to read external configuration (overriding as necessary)
try {
final File configFile = new File("configuration.properties");
if(configFile.isFile()) {
configStream = new FileInputStream(configFile);
configProperties.load(configStream);
}
} finally {
if(configStream != null) {
configStream.close();
}
}
return configProperties;
}
Assicurati di regolare i percorsi come necessario, anche se personalmente preferisco mantenere la configurazione principale in un punto ovvio sia nel mio percorso di classe delle risorse sia esternamente.
Si noti che, a seconda delle informazioni contenute nella configurazione, si consiglia di escludere alcune informazioni dalla propria configurazione interna . Un esempio potrebbe essere informazioni per connettersi a un database. In tal caso, durante il test, fornisci tu stesso la configurazione esterna che ha tutte le informazioni mancanti sulla connessione al database. Quando esegui la distribuzione, ometti la configurazione esterna e ne crei una nuova per il tuo cliente (la pratica migliore impone di controllare l'esistenza di questi parametri per una buona misura e genera un'eccezione appropriata se mancante).
Spero che ti aiuti!