Sto lavorando con un codice esistente, cercando di aggiungerlo e aumentare i test di unità per esso. Ma ci sono alcuni problemi con il test del codice.Progettazione di costruttori per testabilità
Costruttore originale:
public Info() throws Exception
{
_ServiceProperties = new ServiceProperties();
_SshProperties = new SshProperties();
}
Sono consapevole che questo è un male, e ovviamente non verificabile. In un ambiente junit, questa classe non creerà ogni volta poiché non sarà in grado di trovare le proprietà necessarie per costruirsi. Ora, sono consapevole che questa classe sarebbe molto più testabile con il semplice cambiamento di spostamento di qualsiasi cosa preceduta da "nuovo" come parametro.
così finisco con:
nuovo costruttore:
public Info(ServiceProperties srvProps, SshProperties sshProps) throws Exception
{
_ServiceProperties = srvProps;
_SshProperties = sshProps;
}
che mi permette di unità di test correttamente questa classe Info. Il problema, però, è ora tutto quel lavoro è spinto a qualche altra classe:
Metodo qualche altra classe:
public void useInfo() throws Exception
{
ServiceProperties srvProps = new ServiceProperties();
SshProperties sshProps = new SshProperties();
Info info = new Info(srvProprs, sshProprs);
doStuffWithInfo(info);
}
Ora, questo metodo non è verificabile. Tutto quello che sono riuscito a fare è spingere dove si verificano le costruzioni di questi oggetti Property, e da qualche altra parte qualche pezzo di codice sarà bloccato a dover chiamare "nuovo".
Ecco il problema per me: non riesco a capire come rompere questa catena di eventi semplicemente spingendo queste "nuove" chiamate da qualche altra parte. Cosa mi manca?
Si può anche dare un'occhiata al nostro Materiale del corso di primavera: http://www.trainologic.org/courses/info/2 –