2010-06-10 21 views
9

Nel mio progetto UnitTest MSTest, prima di eseguire qualsiasi test, ho bisogno di eseguire alcuni comandi. Esiste una funzionalità, tipo Global.asax è per progetti basati sul Web, che mi consentirà di avviare qualcosa prima dell'esecuzione di qualsiasi test?Global.asax per i test delle unità?

Devo chiarire che quando dico "esegui alcuni comandi", non intendo comandi DOS, ma eseguo del codice.

risposta

16

Se ho capito bene, è necessario avere un po 'di corsa il codice di inizializzazione prima di iniziare la vostra test. Se questo è davvero il caso si dovrebbe dichiarare un metodo all'interno della vostra classe di quote-test con la ClassInitializeAttribute in questo modo:

[ClassInitialize] 
public void ClassSetUp() 
{ 
    //initialization code goes here... 
} 

Edit: c'è anche il AssemblyInitializeAttribute che verrà eseguito prima di qualsiasi altro test in assembly

+3

+1, wow, non avevo idea di 'AssemblyInitializeAttribute' – tster

+0

' AssemblyInitializeAttribute' è esattamente ciò di cui ho bisogno. Grazie mille, prenditi un segno di spunta verde. – AngryHacker

+0

Ho dovuto modificare la firma per farlo funzionare ora: 'public static void ClassSetUp (TestContext ctx)' – Apolo

1

proprietà di voi progetto e poi campo di debug non è possibile specificare argomenti

EDIT Quando viene visualizzato il menù di debug nelle proprietà è possibile avviare un programma esterno per fare certe cose per voi quando si avvia il debug . Questo si innesca quando si avvia un'istanza del progetto di test. È inoltre possibile specificare argomenti della riga di comando nella casella degli argomenti della riga di comando.

Per esempio io uso NUnit a specificare NUnit il programma esterno e specificate la posizione della DLL tra gli argomenti della riga di comando

+0

Mi piacerebbe eseguire del codice piuttosto che eseguire comandi esterni. – AngryHacker

+0

E cosa ti impedisce di eseguire un file .exe che hai creato? Puoi compilare il tuo codice che deve essere eseguito in un exe che inizierai in una sessione di debug o mi manchi qualcosa perché penso che sia una buona soluzione al tuo problema. – Chino

+0

Ho bisogno di eseguire un po 'di codice prima dell'inizio di qualsiasi test. Il codice è costituito da alcuni metodi statici su alcune classi che verranno richiamati in seguito dalla maggior parte dei test. Ecco perché ho bisogno di eseguire del codice prima dell'esecuzione di qualsiasi test. – AngryHacker

3

I framework di test unitari di solito supportano l'impostazione e la "demolizione" dei metodi sia per l'intero dispositivo di test sia per i singoli test. MSTest consente di specificare quali metodi da eseguire quando con questi attributi:

[ClassIntialize()] 
public void ClassInitialize() { 
    // MSTest runs this code once before any of your tests 
} 

[ClassCleanup()] 
public void ClassCleanUp() { 
    // Runs this code once after all your tests are finished. 
} 

[TestIntialize()] 
public void TestInitialize() { 
    // Runs this code before every test 
} 

[TestCleanup()] 
public void TestCleanUp() { 
    // Runs this code after every test 
} 

Detto questo, stare attenti con l'inizializzazione di classe e metodi di pulizia se si sta eseguendo unit test ASP.NET. Come si dice nella documentazione ClassInitializeAttribute:

Questo attributo non deve essere utilizzato su unit test ASP.NET, cioè, qualsiasi test con [HOSTTYPE ("ASP.NET")] attributo. A causa della natura senza stato di IIS e ASP.NET, un metodo decorato con questo attributo può essere chiamato più di una volta per esecuzione di test.

+0

Buona aggiunta sui test delle unità ASP.NET! Ci ho lavorato attorno definendo [TestInitialize] in una classe base. – Jowen

Problemi correlati