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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top