Stiamo utilizzando StructureMap in un nuovo progetto di sviluppo software. Uno dei membri del team ha implementato un test unitario che sostanzialmente verifica la configurazione del contenitore StructureMap . Lo fa facendo quanto segue;
- Conta il numero di istanze di assiemi configurati per le classi nel nostro spazio dei nomi dell'applicazione.
- Definisce le istanze previste a livello di classe
- Asserisce che le istanze previste corrispondono alle istanze totali trovate.
- Asserisce che le istanze previste corrispondono a quelle definite nel test
Un esempio di questo è;
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
Abbiamo anche 'unit test' per la seguente classe;
public MyClass(IEnvironmentRepository environmentRepository)
{
}
In questi test, prendiamo in giro IEnvironmentRepository, quindi non lo inietteremo dal contenitore come accadrebbe nel sistema live.
Un collega ha ignorato il test dell'unità sulla configurazione della mappa di configurazione con un commento lungo la riga "Il test dell'unità verifica solo la propria configurazione". Questo era ovviamente lo scopo del test e, a mio parere, è perfettamente valido. Ho chiesto al tizio che ha ignorato il test di rimuovere la configurazione della structuremap per IEnvironmentRepository
(con il test ancora ignorato) ed eseguire l'intera suite di test unitaria, sono passati tutti. Abbiamo quindi eseguito l'applicazione ed è caduta perché la configurazione del contenitore non era più valida. A mio parere, questo ha dimostrato il valore del test, il mio collega è ancora in disaccordo. Ha semplicemente affermato che non dovremmo testare la configurazione, ma ritengo che questo sia ben all'interno del mandato di un test unitario.
Quindi una serie di domande;
- È un test di unità valido? Stiamo testando la configurazione del nostro contenitore, non che funzioni la structuremap (ma posso vedere la sovrapposizione)
- In caso contrario, come è possibile convalidare la configurazione senza verificarla. Come puoi impedire a qualcuno di eliminare accidentalmente una riga di codice richiesta e verificarla?
- Il test unitario
MyClass
risolve l'istanza diIEnvironmentRepository
dal contenitore e lo inoltra?