File Xml che non copia per testare la directory di output

Visual Studio 2010, macchina x64, che utilizza il server Web incorporato per ospitare un servizio WCF con una serie di test unitari utilizzando il framework di test integrato.

Ho un file XML che i miei test devono caricare per essere eseguito. Ho incluso questo file nel progetto di test e ho il file impostato su “content” e “always copy to output directory”. Questo file copia nella directory bin \ debug fine.

Quando eseguo i test, tuttavia, il file xml non è lì. Invece di cercare nella cartella bin \ debug del progetto, lo cerca nella directory di lavoro del test, C: \ Projects \ SAP Reapprovals \ TestResults \ name_machine 2010-12-06 13_45_43 \ Out. Il file non è stato copiato lì .

C’è un modo per forzare la copia di questo file o è necessario qualificare completamente il riferimento all’interno del test?

TIA!
Giacomo

Aggiornare
Ho impostato l’attributo DeploymentItem , ma il file non viene ancora copiato. Ma sembra proprio quello che voglio … qualche idea per cui non funziona?

Il mio codice di prova:

 [TestMethod] [DeploymentItem("SAP - GS3 format.xml")] public void TestProcessSapRoles() { // I get a 'file not found' error here, and when // I check the output directory, it isn't there XElement rolesRoot = XElement.Load("SAP - GS3 format.xml"); } 

RISPOSTE:
Grazie andiamo a CPedros, con il suo aiuto ho ingrandito un po ‘questo. Ho eseguito il Process Monitor di SysInternals, per vedere dove cercava il mio file xml. Ecco cosa ho trovato:

Quando ho eseguito i test utilizzando ctrl + r, ctrl + t (test di debug nel contesto corrente), Visual Studio ha ignorato completamente l’attributo DeploymentItem e non ha nemmeno provato a copiare il file ovunque. In questo caso ho ricevuto un’eccezione “File non trovato” quando ho provato ad aprirlo per la lettura. Visual Studio ha creato una directory di lavoro temporanea per i test, ma c’era solo un file, AgentRestart.dat.

Quando ho eseguito i test utilizzando il pulsante “Esegui test unità” nella barra degli strumenti (non sono sicuro quale sia l’opzione di test), Visual Studio non ha copiato il file, ma lo ha fatto riferimento direttamente dalla directory del progetto. Il test è stato superato e non è stata creata alcuna directory di lavoro temporanea.

Quando ho eseguito il test dall’opzione di menu “esegui -> test nel contesto corrente” (esegui, non esegui il debug), è stata creata una directory di lavoro temporanea e il file xml e tutti gli eseguibili sono stati copiati su di esso. Il test è passato.

Quando ho modificato Local.testsettings (sotto una cartella Elementi soluzione nella mia cartella test), ho scelto ‘Deployment’ dal menu a sinistra e ho aggiunto il file xml. È stato aggiunto come [directory soluzione] \ [directory progetto] \ file.xml. Ho rimosso l’attributo DeploymentItem . Ora sono stato in grado di eseguire il debug dei test; il file xml e tutti gli eseguibili sono stati copiati nella directory temporanea creata per il test.

TLDR: Visual Studio ignora l’attributo DeploymentItem per alcuni modi di eseguire il test. La soluzione è modificare Local.testsettings , il menu Deployment e aggiungere il file a mano.

Grazie per l’aiuto! Sto dando credito a CPedros per la sua risposta, poiché è stato il più utile nel risolvere questo problema.

Prova ad annotare il test con l’attributo DeploymentItem: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute(v=VS.100).aspx

Ecco uno snippet di codice dalla documentazione:

  [TestClass] public class UnitTest1 { [TestMethod()] [DeploymentItem("testFile1.txt")] public void ConstructorTest() { // Create the file to deploy Car.CarInfo(); string file = "testFile1.txt"; // Check if the created file exists in the deployment directory Assert.IsTrue(File.Exists(file), "deployment failed: " + file + " did not get deployed"); } } 

esaminare l’utilizzo di questo attributo sui test che richiedono il file xml:

http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute.aspx

Ho lottato con il deploymentattribute per un po ‘ora, e alla fine mi sono appena arreso. Invece sto solo copiando manualmente i miei file in una directory di test e poi li ho eliminati una volta terminato:

Percorsi di test:

 Private _locationOfTestFilesToBeCopied As String = "C:\...\TestFilesToBeCopied" Private _locationOfTestFiles As String = "C:\...\TestFiles" 

Metodo di inizializzazione:

  Public Sub Setup() DeleteCopiedTestFiles() CopyTestFilesToTestDirectory() End Sub 

Copia e cancella metodi:

 Private Sub CopyTestFilesToTestDirectory() Dim sourceDirectory As New DirectoryInfo(_locationOfTestFilesToBeCopied) For Each fileInfo As FileInfo In sourceDirectory.GetFiles fileInfo.CopyTo(_locationOfTestFiles & "\" & fileInfo.Name, True) Next sourceDirectory = Nothing End Sub Private Sub DeleteCopiedTestFiles() Dim sourceDirectory As New DirectoryInfo(_locationOfTestFiles) For Each fileInfo As FileInfo In sourceDirectory.GetFiles fileInfo.Delete() Next sourceDirectory = Nothing End Sub 

Ho trovato questo funziona bene

Stavo affrontando il problema come, uno dei miei file non è stato copiato nella cartella Out anche se ho inserito il nome di quel file in local.testSettings e impostato la proprietà come “Copia sempre”.

I seguenti passaggi hanno risolto il mio problema:

  1. Apri il menu Test
  2. Seleziona Impostazioni di prova
  3. Seleziona l’opzione “Seleziona il file delle impostazioni di prova”
  4. Seleziona il tuo file .testsettings dalla finestra Apri impostazioni file
  5. Assicurati che il file Selected .testsettings sia selezionato in Test -> Impostazioni di prova

Spero che questo possa aiutare qualcuno.