Come verificare le classi anonime?
-
16-09-2019 - |
Domanda
Credo che è necessario avere familiarità con questo idioma, che è una sorta di scusa di Java per le chiusure
//In the "Resource Manager" class
public void process(Command cmd){
//Initialize
ExpensiveResource resource = new ExpensiveResource();
//Use
cmd.execute(resource);
//Release / Close
resource.close();
}
//In the Client class...
manager.process(new Command(){
public void execute(ExpensiveResource res){
//Do things with the resource
}
});
Ho usato questo linguaggio / modello molto ma recente ho provato a testarlo , e mi sta dando un mal di testa ...
Come si arriva a testare in isolamento il ResourceManager e le classi client? Ho trovato che questo stretto-coppie così tanto che non si può fare facilmente.
Le idee sono apprezzate.
Saluti
Soluzione
Se non si vuole fare il tipo anonimo un vero e proprio tipo è possibile testare, provare a spostare il codice nella sua funzione execute () in un'altra funzione che è possibile testare. Il tipo anonimo diventa allora un oggetto umile ( http://xunitpatterns.com/Humble%20Object.html).
modifica , ma si dovrebbe continuare a trovare un modo per testare il codice nella funzione anonima.
In un linguaggio typesafe come C #, questo può essere fatto avendo il codice di chiamata anonima una funzione membro virtuale. Il test è specializzata la classe eseguendo l'override chiamata di funzione virtuale, controllando che sia chiamato.
In un linguaggio nontypesafe come Javascript, la funzione membro chiamata è già virtuale. Quindi, piuttosto che creare un tipo derivato, è possibile sovrascrivere la chiamata funzione di membro con una versione registrata.
Altri suggerimenti
Credo che le classi anonime dovrebbero essere così piccolo e semplice che testare la struttura compresa / li utilizzano dovrebbero essere abbastanza buono.
Se hai qualcosa di così complicato, grande, importante che si sente il bisogno di provarlo renderla una classe piena.
Non utilizzare classi interne anonime molto (se non del tutto). Oltre ad essere difficili da testare, sono praticamente impossibili da riutilizzare, senza copia e incolla.
La maggior parte del tempo, che li rende classi completa consente una maggiore flessibilità e migliora la progettazione OO (l'aggiunta di più classi quasi sempre migliora il vostro disegno).
A proposito, come lei ha ricordato le chiusure hanno anche lo stesso problema -. Difficili da riutilizzare