2010-01-25 5 views
10

Ich habe Probleme, eine XSL-Datei in das gleiche Verzeichnis wie die Testassembly zu kopieren, wenn ich das DeploymentItem-Attribut für einen MSTest-Komponententest verwende. Ich folgte der gewählten Antwort für this question und die Datei, die ich kopiert habe, hat seine "Copy to Output Directory" auf "Copy Always" gesetzt. Wenn ich mein ProjectDir \ bin-Verzeichnis (das Zielverzeichnis) überprüfe, ist die Datei, die ich kopiert werden möchte, neben den DLLs und PDBs tatsächlich vorhanden.C# DeploymentItem kann Datei für MSTest-Komponententest nicht kopieren

Ich habe ein paar Unit-Tests mit dem folgende Setup:

private const string DLL = "Service.dll"; 
private const string XSL_PATH = "transform.xsl"; 

[TestInitialize] 
public void InitializeTest() 
{ 
    Assert.IsTrue(File.Exists(DLL)); // passes 
} 

[TestMethod] 
[DeploymentItem(DLL)] 
[DeploymentItem(XSL_PATH)] 
public void XmlToResultsTest() 
{ 
    Assert.IsTrue(File.Exists(XSL_PATH)); // fails 
} 

Der XSL-Test schlägt fehl, weil, wenn ich MSTest die Testresults überprüfen \ particularTestRun \ Out-Verzeichnis, ich den DLLs und die PDBs sehen, aber meine XSL-Datei ist nicht da. Was ich wissen möchte, ist warum die XSL-Datei wird nicht zusammen mit den DLLs und PDBs kopiert, auch wenn ich explizit Visual Studio sage, es dort über DeploymentItem zu kopieren?

Antwort

10

Dank Marc Gravell's answer zu einer verwandten Frage von mir, versuchte ich meine MSTest .testrunconfig-Datei zu aktualisieren, so dass meine XSL-Datei im Abschnitt "Bereitstellung" enthalten ist. Dies lässt meine Unit-Tests passieren, aber ich bin immer noch beunruhigt, dass ich dies tun musste - sollte die Kombination DeploymentItem und das Markieren der Eigenschaften der Datei in meinem Projekt, um in das Output-Verzeichnis zu kopieren, ausreichen?

+0

Ich hatte das gleiche Problem Sarah - sehr verwirrend in der Tat! –

1

Angeblich schlagen VS2008-Bereitstellungselemente automatisch fehl, es sei denn, das Ausgabeverzeichnis ist eine literale Zeichenfolge. Hmmm^_^

+0

Wo ist deine Quelle für das? Wenn das stimmt, dann ist das nur verrückt. Ich will meine String-Konstanten, dang it! –

+0

Nicht etwas, das ich persönlich reproduziert, aber ich hatte einige Bereitstellungsprobleme und um googeln, fand viele Blogs sagen, dass sie Probleme hatten, mit DeploymentItem, zB: http://sergeyshishkin.spaces.live.com/blog/cns! 9F19E53BA9C1D63F! 185.entry Schließlich entschied ich mich für einen globalen Deployment-Ordner in einer .testrunconfig-Datei. – andrewb

1

Ich hatte das gleiche Problem, obwohl ich war mit einem Literal-String im Deployment-Element. Ich habe sogar versucht, die Datei zum "Deployment" -Abschnitt der Testeinstellungen hinzuzufügen, was auch nicht funktioniert hat. Es stellte sich heraus, dass das Problem mit der Testplattform zusammenhing.

Ich habe eine 64-Bit-Maschine und sowohl das Projekt, das ich teste und die Einheit Plattform Ziel des Testprojektes war ‚Any CPU‘.

fand ich, dass der Einsatz Artikel nur kopiert wurden, wenn ich ‚Run Tests in einem 64-Bit-Prozess auf 64-Bit-Maschine“ ausgewählt.

1

Wir hatten eine ähnliche Situation bei der Arbeit, wo das DeploymentItem Attribut wurde nicht wie erwartet funktioniert Wir haben auch 64-Bit-Maschinen verwendet, deren Projektplattform auf "Beliebige CPU" eingestellt war. Als Workaround haben wir die vom Komponententest benötigte Datei als Link vom Komponententestprojekt eingefügt und auf "In Ausgabeverzeichnis kopieren" gesetzt "Copy Always".