2014-12-04 5 views
10

Il codice I test dell'unità si riferisce a un'appetting nel file app.config. Per soddisfare questo, ho aggiunto un file app.config al mio progetto di test delle unità. Se faccio clic sull'icona "Esegui tutti i test" nella finestra Sessioni di test unità, tutti i miei test passano.Perché sto ottenendo un comportamento diverso quando si fa clic sul pulsante "Esegui tutti i test" di Resharper vs utilizzando il comando di scelta rapida da tastiera?

Ho mappato il comando "ReSharper.ReSharper_UnitTest_RunSolution" a Ctrl + Maiusc + Alt + U. Se eseguo i test premendo questa combinazione, tutti i test vengono eseguiti, ma non riescono a trovare l'appetting, che viene considerata nulla.

Suppongo che questo significhi che il clic del pulsante viene eseguito nel contesto del progetto di test, mentre il comando non lo fa, ma non riesco a capire cosa sta facendo il comando.

Ho mappato il comando errato?

EDIT 1: Ho anche provato ad utilizzare la scorciatoia da tastiera Alt-RUN (ReSharper> unit test> Esegui tutti), così come cliccando il menu manualmente, e ha scoperto che questo fa sì che anche tutti gli unit test per non trovare l'appetting e quindi fallire. Facendo clic sull'icona Esegui tutti i test in Unità Test Sessions (la doppia freccia verde) continua a funzionare correttamente.

EDIT 2: Ho capito che probabilmente dovrei prendere in giro una classe separata che preleva app dal file di configurazione comunque, quindi questo è quello che sto facendo ora. Quindi ora non c'è alcuna dipendenza dal file di configurazione durante il test dell'unità.

risposta

3

Ci sono due cose da fare qui. In primo luogo, l'icona Esegui tutti i test nella finestra delle sessioni esegue tutti i test nella sessione, mentre la voce di menu Esegui tutti i test esegue tutti i test nella soluzione. Un po 'di confusione sul fatto che abbiano lo stesso nome, ma ha senso dato il contesto. Questo è il motivo per cui danno risultati diversi.

In secondo luogo, quando si eseguono tutti i test in una soluzione, l'impostazione dell'app potrebbe non essere trovata. Ciò è dovuto all'ottimizzazione eseguita dal test runner che esegue tutti i test nello stesso AppDomain. Ciò evita il sovraccarico di creazione di un nuovo AppDomain per ciascun assembly, ma presenta il lato negativo che verrà utilizzato solo un app.config per tutti gli assembly. Se seleziona quello sbagliato, le impostazioni dell'app vengono perse.

È possibile disattivare questo deselezionando ReSharper »Opzioni» Test unità »" Utilizzare AppDomain separato per ciascun assieme con test ". Idealmente, dovrebbe essere disabilitato se qualche progetto ha un'app.config - Ho aggiunto una richiesta di funzionalità per cui puoi votare e tracciare: https://youtrack.jetbrains.com/issue/RSRP-428958

+0

Grazie per la risposta - ha perfettamente senso - avere qualche taglia! Alla fine mi sono reso conto che il modo più affidabile per costruire i miei test era quello di utilizzare un lettore di app di simulazione e di modificare le impostazioni. –