2013-03-06 8 views
5

Ho un progetto di test dell'interfaccia codificata che ha riferimenti ad altri assembly nella soluzione. In qualche modo alcuni assiemi non vengono copiati nella directory TestResults/Out, mentre altri vengono copiati. Tutti gli assembly hanno l'opzione Copy Localtrue (non so se è davvero importante) e sono assolutamente uguali in altre opzioni. Tutti gli assembly vengono copiati quando avvio il test localmente da VS2010, ma non quando sul build server.TFS non sta distribuendo l'assembly di riferimento per verificare la dir quando sul server di build

Se utilizzo l'attributo [DeploymentItem] per forzare la distribuzione di questi assembly "imprevedibili" vengono implementati correttamente.

io non riesco a farlo - Ho sempre pensato che se si fa riferimento di montaggio (in References sezione del Solution Explorer) che il montaggio sarà copiato TestResults/Out e [DeploymentItem] è necessario per copiare alcuni XML e altri file di configurazione.

+0

Qual è il rapporto di queste assemblee al progetto - sono proiettano riferimenti o staticamente collegati (librerie di terze parti, ecc)? – bryanbcook

+0

Sono riferimenti di progetto. – nikita

risposta

11

L'ho visto prima. Il progetto di test fa riferimento ad altri progetti ma, quando i test vengono eseguiti, noterete che gli assembly non sono presenti nella cartella TestRun Out.

A differenza di altri test runner che eseguono test di unità da una posizione fissa, MSTest copia gli assembly necessari a una cartella di esecuzione del test in cui vengono eseguiti i test. Il design consente di confrontare i risultati dei test, la copertura, le uscite tra le esecuzioni dei test.

L'errore comune è che in qualche modo impostazioni di compilazione come "copia locale" in qualche modo influenzare che le dipendenze sono utilizzati per testare , che semplicemente non è vero. MSTest utilizza la riflessione per determinare i riferimenti di assieme necessari per l'esecuzione di prova.

L'errore che si sta visualizzando è probabilmente causato dal fatto che si è fatto riferimento all'assieme ma il gruppo di test non lo sta utilizzando direttamente. È possibile verificarlo utilizzando un'utility di ispezione IL (DotPeek, Reflector, ecc.) Per consultare i riferimenti dell'assieme di test. (Questo è spesso un problema nei progetti WPF che fanno riferimento a assembly nello XAML.)

Per risolvere, utilizzare DeploymentSettings per copiare l'assembly nella cartella di output; oppure utilizzare l'assieme nel progetto di test. Ad esempio, aggiungendo quanto segue al progetto di test emetterà IL che garantisce l'assemblaggio viene distribuito:

var type = typeof(AssemblyNotBeingCopied.MyClass); 
+1

Grazie per il suggerimento, ma non è stato d'aiuto. Ho aggiunto istruzioni 'typeof' per testare il metodo, ma' MSTest' continua a non distribuire diversi assembly. – nikita

+1

ha funzionato per me. Verifica che il tipo di riferimento sia nell'assembly che desideri caricare. –

Problemi correlati