Stiamo utilizzando StructureMap in un nuovo progetto di sviluppo software. Uno dei membri del team ha implementato un test unitario che testa sostanzialmente la configurazione del contenitore StructureMap . Lo fa nel modo seguente;
- Conta il numero di istanze di assembly 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 inietteremmo dal contenitore come accadrebbe nel sistema live.
Un collega ha ignorato il test unitario sulla configurazione della strutturemap con un commento lungo la linea di "Test unitario verifica solo la propria configurazione". Questo era ovviamente lo scopo del test e secondo me è perfettamente valido. Ho chiesto al ragazzo che ha ignorato il test di rimuovere la configurazione della struttura per IEnvironmentRepository
(con il test ancora ignorato) ed eseguire l'intera suite di test dell'unità, tutti hanno superato. Abbiamo quindi eseguito l'applicazione ed è caduta perché la configurazione del contenitore non era più valida. Secondo me, questo ha dimostrato il valore del test, il mio collega non era ancora d'accordo. Ha semplicemente affermato che non dovremmo testare la configurazione, ma ritengo che rientri nell'ambito di un test unitario.
Quindi una serie di domande;
- È un test unitario valido - Stiamo testando la configurazione del nostro contenitore, non che la strutturemap funzioni (ma posso vedere la sovrapposizione)
- In caso contrario, come è possibile convalidare la configurazione senza testarla. Come si può impedire a qualcuno di eliminare accidentalmente una riga di codice richiesta e archiviarla?
- Il
MyClass
test unitario dovrebbe risolvere l'istanza diIEnvironmentRepository
dal contenitore e passare questo?