2012-03-09 19 views
11

Sembra che abbia un problema, l'applicazione che stiamo utilizzando utilizza un kernel Ninject e contiene una particolare configurazione che viene raccolta con i contenuti della chiamata WCF (nome utente, token ...).Esegui test di unità in diverse appdomain con NUnit

Sulla base di una particolare configurazione all'utente vengono assegnati i diritti sull'app, questa viene protetta da una particolare istanza nel kernel di Ninject.

Non possiamo semplicemente ricomporre il kernel di Ninject, quello che vorremmo fare è eseguire un paio di test di Nunit, ma eseguirli ognuno in un dominio app separato (ricreando il kernel ogni volta con impostazioni diverse).

Ho trovato solo modi per eseguire interi progetti di test in domini di app diversi ma non test per test.

C'è un modo per risolvere questo?

Sfortunatamente la configurazione di Ninject non è dalla nostra parte, dobbiamo "vivere" con essa in questo modo.

risposta

5

Non penso che ci sia un modo per risolverlo senza riscrivere parti del codice NUnit. È passato un po 'di tempo da quando mi trovavo nel codice NUnit, ma sono abbastanza sicuro che la parte di caricamento del dominio dell'app principale non sia cambiata.

NUnit utilizza in genere due domini app. Quello predefinito che viene creato quando NUnit viene eseguito e uno separato per caricare gli assembly di test e gli assembly a cui fanno riferimento. Il motivo principale per farlo è consentire lo scarico dei gruppi di test. Non è possibile scaricare una DLL, ma è possibile scaricare un appdomain.

Potrebbe essere possibile eseguire NUnit una sola volta per test e passare il test sulla riga di comando, ma questo è brutto e non sono sicuro che possa essere d'aiuto.

Potrebbe anche essere possibile sfruttare Action Attributes in NUnit 2.6, ma si sta andando a fare un sacco di lavoro lì per farlo.

Si potrebbe anche essere in grado di creare un nuovo dominio applicazione nel vostro metodo di impostazione e chiamare in esso in ciascuna prova. Imbarazzante ma possibile

Mi dispiace che non ho una risposta più completa.

1

Non sono completamente sicuro della tua domanda. Tuttavia sembra che tu abbia bisogno di una sorta di implementazione personalizzata. Hai considerato attributi di test personalizzati? Quindi è possibile configurare ciascun attributo da eseguire in un dominio app diverso? Sto solo inventando alcune idee, ma potrebbero esserci modi migliori per farlo.

+1

xUnit fa questo di default ... –

25

Avevo bisogno di fare la stessa identica cosa, quindi ho creato una libreria che sostanzialmente prende il test corrente e lo ri-esegue in un nuovo AppDomain. È un pacchetto nuget chiamato NUnit.ApplicationDomain ed è open source.

Esempio di codice:

[Test, RunInApplicationDomain] 
public void Method() 
{ 
    Console.WriteLine("I'm in a different AppDomain") 
} 
Problemi correlati