2010-11-05 13 views
21

ho un test che ha bisogno di lavorare più di 1 minuto (VS2008, MSTest, i test vengono lanciati dal VisualStudio):MSTest: come aumentare il tempo di test

const int TestTimeout = 1; 

    [TestMethod] 
    [Timeout(10*60*1000)] // 10 minutes 
    public void Login_ExpirationFail_Test() 
    { 
     IAuthenticationParameters parameters = new AuthenticationParameters(...); 
     LdapAuthentication auth1 = new LdapAuthentication(); 
     IAuthenticationLoginResult res = auth1.Login(parameters); 

     Assert.IsNotNull(res); 
     Assert.IsFalse(string.IsNullOrEmpty(res.SessionId)); 

     const int AdditionalMilisecodns = 400; 
     System.Threading.Thread.Sleep((TestTimeout * 1000 + AdditionalMilisecodns) * 60); 

     LdapAuthentication auth2 = new LdapAuthentication(); 
     auth2.CheckTicket(res.SessionId); 
    } 

Questo test è finito in "Run" modalità con "Test" Login_ExpirationFail_Test "ha superato il periodo di timeout di esecuzione." messaggio di errore, in "Debug" - funziona bene.

Ho visto alcuni problemi simili legati al lancio di test dalla riga di comando.

Come ho potuto ottenere il mio test praticabile in modalità "Run"?

Grazie.

risposta

17

risposta è molto semplice: valore di attributo dovrebbe essere una costante, non un'espressione.

Change

[Timeout(10*60*1000)] 

a

[Timeout(600000)] 

risolto un problema.

EDIT: Commento alla risposta portato alla mia attenzione un errore che ho fatto in origine nella risposta (ha scritto "60000", come valore di timeout). Nel mio codice sorgente ho 6000000 e quel valore mi ha aiutato. la risposta è stata corretta di recente

+5

La tua matematica è sbagliata. L'hai scartata di un fattore 10. Inoltre, l'espressione e la costante sopra sono esattamente equivalenti perché il compilatore C# lo trasformerà nella stessa cosa (eccetto l'errore matematico). Se questa soluzione funzionasse, ho il sospetto che sia perché l'errore matematico ha portato il valore a un valore compreso nell'intervallo richiesto. –

+0

Ehi Andrew, grazie per aver portato questo alla nostra attenzione. Quello era solo un errore di stampa nella risposta. Ho usato la matematica corretta nel mio codice sorgente. Non so perché questo abbia aiutato, ma così è stato. – Budda

+4

@Budda Come è questa una risposta? Perché, * dovrebbe essere una costante *, una risposta? Un'espressione costante è proprio quella, costante e, come Andrew ha sottolineato, questo è ciò che il compilatore fa comunque. L'unica cosa che si riesce a realizzare con trasformarla in un te costante è un sacco di zeri che possono essere facilmente frainteso come credo che questa risposta si può attestare, l'espressione è fine e molto più leggibile. –

0
Non

passaggi specifici, ma dovrebbe puntare nella giusta direzione:

Aggiungere un test file di impostazioni per la soluzione, se non ne hai già uno.

Aprire la procedura guidata di configurazione con le impostazioni di test, e potete trovare l'impostazione che controlla il timeout di prova.

+0

ci sono tali impostazioni in più configurazioni prove, ma essi sono legati a tutte le prove ... mentre io voglio avere timeout esteso per 1 prova solo ... – Budda

+0

perché stai applicando Timeout al const? Non ho usato quell'attributo, ma sicuramente dovrebbe essere applicato al metodo di prova – eglasius

+0

Spiacente per errore di stampa. Sicuramente, [Timeout] è stato applicato al metodo. Ecco un errore di stampa (corretto di recente). – Budda

8

Oltre a specificare il numero di secondi, Timeout() supporta una costante che consente l'attesa infinita.

[Timeout(TestTimeout.Infinite)] 
+0

Questo non fornisce una risposta alla domanda.Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. - [Dalla recensione] (/ recensione/post di bassa qualità/11367272) –

+0

La domanda originale era un problema con il timeout del test, ad esempio nel mio caso il mio test era in esecuzione per 3h +, quindi la risposta corretta era la prima risposta, per impostare il tempo, la mia risposta ha detto "può anche fare" il che significa, se lo sviluppatore ha un test a lungo in esecuzione e non sa quanto tempo ci vuole, TestTimeout.Infinte è l'opzione migliore. Per favore, spiega perché questa non è una buona risposta? –

+0

È meglio che le risposte spieghino le proprie motivazioni e non si basino su altre risposte per il contesto, ma sono d'accordo che questa sia un'aggiunta utile. Mi scuso per il processo di revisione a volte un po 'di confusione senza contesto. –

Problemi correlati