2011-11-25 8 views
5

Ho questa chiamata specifica nel mio codice e ho trovato che la configurazione deve essere diversa quando si esegue l'applicazione completa come quando sto testando utilizzando un test dell'unità di integrazione.Utilizzare la direttiva #IF per rilevare il test dell'unità

C'è un modo per verificare una chiamata da un test di unità utilizzando la direttiva #if?

#if TestMethod 
...do this config 
#else 
...do this config 
#endif 

Forse in qualche modo per rilevare un attributo sulla funzione di test dell'unità?

risposta

11

No, perché il codice esiste nel file binario o non lo è. La decisione viene presa interamente in fase di compilazione, quindi non c'è niente che puoi fare al momento dell'esecuzione per reintrodurre il codice "mancante". Dovresti caricare dinamicamente uno di due file binari diversi ed eseguire i test in questo modo.

Avete per utilizzare la compilazione condizionale, invece di decidere quale percorso intraprendere al momento dell'esecuzione?

+0

Era alla ricerca di un modo semplice quindi solo commento e codice di decompressione. Non volevo perdere altro tempo a scavare attraverso la mappa della struttura. In origine il test funzionava bene, quindi quando l'app funzionava, generava un errore su questa riga. Speravo in una soluzione facile e veloce, commentando il codice. Ora che vedo le direttive come un evento a tempo compilato, ha perfettamente senso perché non funzionerebbe. –

0

Non si desidera gestire il contesto del chiamante dal codice; in particolare se stai provando a testare la logica al suo interno. Se, tuttavia, si desidera eseguire alcune funzioni con parametri diversi (ad esempio) a seconda che lo si esegua nell'applicazione o nel contesto di test, è possibile utilizzare un determinato tipo di base o interfaccia come parametro oppure taggare il metodo con un attributo e controlla l'attributo utilizzando la riflessione. Le direttive devono essere usate per determinare quale codice dovrebbe essere compilato e dovresti usarle solo se sei sicuro che questo è ciò che intendi.