Come è possibile utilizzare file di configurazione "esterni" (ad es. Con configSource) con un progetto di test unit MSTest?

StackOverflow https://stackoverflow.com/questions/152866

  •  02-07-2019
  •  | 
  •  

Domanda

Per semplicità, in genere ho diviso gran parte della mia configurazione (cioè il contenuto di app.config e web.config) in file .config separati, e quindi li ho consultati dal file di configurazione principale usando l'attributo 'configSource'. Ad esempio:

<appSettings configSource="appSettings.config"/>

e quindi posizionando tutte le coppie chiave / valore in quel file appSettings.config invece di averlo in linea nel file di configurazione principale:

<appSettings>
    <add key="FirstKey" value="FirstValue"/>
    <add key="SecondKey" value="SecondValue"/>
    ...
</appSettings>

Questo in genere funziona alla grande con l'applicazione stessa, ma ho riscontrato problemi nel tentativo di scrivere unit test che, per qualsiasi motivo, devono ottenere un valore da una sezione di configurazione memorizzata in uno di questi file esterni. (Comprendo che la maggior parte di questi verrebbero probabilmente considerati "test di integrazione", in quanto si basano sul sistema di configurazione, e ho anche "test unitari puri", ma quelli non sono il problema. cercando davvero di verificare che questi valori di configurazione vengano recuperati correttamente e abbiano un impatto sul comportamento nel modo corretto).

A causa di come MSTest compila e copia l'output in cartelle dall'aspetto offuscato che sono diverse da ogni esecuzione di test (piuttosto che dalla cartella 'bin' come potresti pensare), non sembra mai essere in grado di trovare quei file esterni mentre i test sono in esecuzione. Ho provato a scherzare con le azioni post build per farlo funzionare, ma senza fortuna. C'è un modo per far copiare questi file esterni nella cartella di output corretta in fase di esecuzione?

È stato utile?

Soluzione

Trovato:

Se si modifica la configurazione dell'esecuzione del test (facendo doppio clic sul file .testrunconfig che viene inserito nella cartella della soluzione "Elementi soluzione" quando si aggiunge un nuovo unit test), si ottiene una finestra di dialogo di configurazione dell'esecuzione del test. C'è una sezione lì chiamata 'Deployment' dove puoi specificare file o intere cartelle da qualsiasi punto della soluzione che può essere copiato con gli assembly compilati in fase di esecuzione nella cartella corretta.

In questo modo, ora posso effettivamente definire la maggior parte della mia configurazione in un set di file .config esterni e farli copiare automaticamente al termine di ogni test.

Altri suggerimenti

Le configurazioni di esecuzione dei test sono un po 'scomode quando si tenta di eseguire test al di fuori di Visual Studio.

Per l'esecuzione da riga di comando usando MSTest diventano piuttosto ingombranti da mantenere "puliti". Sono anche "globali" alla soluzione in modo che i file esterni vengano copiati per ogni progetto di test.

Preferisco di gran lunga l'attributo DeploymentItem .

[TestMethod]
[DeploymentItem(@"test_data.file")]
public void FooTest()
{...}

Rende i test indipendenti dai file .testrunconfig.

  1. scrivi questo nel tuo connectionString. Il primo ConnectionString.config non esiste.

    < " connectionStrings configSource = " ConnectionString.config " > & Quot;

  2. apri il prompt dei comandi (CMD) con privilegi di amministratore.

  3. Crea un collegamento simbolico con il nome di ConnectionString.config nella cartella bin / debug.

C: \ Windows \ systems32 > mklink " C: \ Link alla cartella \ .... \ ConnectionString.config " " C: \ Users \ Nome \ Cartella originale \ ..... \ ... \ Secure ConnectionString.config "

infine crea il file di configurazione di ConnectionString nella posizione specificata. e funziona correttamente.

 inserisci qui la descrizione dell'immagine

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top