2009-07-13 4 views
3

Ich erstelle dynamisch eine Instanz einer Klasse mit Reflektion und das funktioniert gut, außer wenn ich dies durch Komponententests versuche - ich benutze das MS-Testframework.
ich den bekannten Fehler aus: „Die Datei oder Assembly‚Assy‘oder eine ihrer Abhängigkeiten geladen Das System kann die angegebene Datei nicht finden kann“
ich die DLL in dem ist \ debug ist von der kopiert habe Unit-Test-Projekt - ist das nicht der richtige Ort?Problem mit Reflektion in Unit/Integration Tests

string assyName = "Go.Data.SqlServer"; 
string typeName = "GoMolaMola.Data.SqlServer.DataProviderFactory"; 

Assembly assy = Assembly.Load(assyName); 
object o = assy.CreateInstance(typeName); 

Irgendwelche Ideen? Ich bin neu in der Unit-Tests und jede Hilfe wäre willkommen.

Dank

Antwort

4

der bin/Debug Ordner nicht ist, wo die Unit-Tests laufen Visual Studio wird die Datenausgabe der Unit-Test-Zusammenstellung zu einem TestResults Ordner kopieren (in der Regel die letzten fünf Testläufe zu halten, die jeweils mit einem. Zeitstempel, der in den Ordnernamen eingebettet ist) und führen Sie die Komponententests dort aus.

Wenn Sie die DLL in diesem Ordner erstellen möchten, erstellen Sie entweder einen Verweis auf die DLL von Ihrem Testprojekt, oder verwenden Sie das DeploymentItem-Attribut, um sicherzustellen, dass das Element in das Testverzeichnis kopiert wird.

+0

Sie haben Recht, es wird nicht aus dem Ordner bin ausgeführt. Ich habe eine Referenz aus dem Testprojekt hinzugefügt und das hat dafür gesorgt! Danke für Ihre Hilfe – iammaz

0

Für Fälle wie diesen, wenn die DLL dynamisch aus der Unit Testing benötigt wird geladen, habe ich ein Post-Build-Ereignis, dass Kopien die DLL in dieses Verzeichnis. Ich würde gerne wissen, ob es einen anderen Weg gibt, es zu tun. Das war der einzige Weg, die für mich gearbeitet :(

ein bearbeiten Post-Build rechten Maustaste auf das Projekt über, gehen Sie zu Build-Ereignisse, und legen Sie die Kopie, wie dies in der post- Erstellen Sie Ereignis Befehlszeile:

copy $(TargetPath) "$(SolutionDir)yourDir\$(TargetFileName)" 
1

stand ich auch dieses Problem und keines der oben genannten Antwort war für mich :( 1. Verweis auf Projekt Hinzufügen funktioniert nicht für mich 2. DeploymentItem Attribut Hinzufügen auch nicht 3. funktioniert das Hinzufügen Der Post-Build-Befehl ist auch in diesem Fall nicht möglich, da die Unit-Test-Engine jedes Mal ein neues Out-Verzeichnis mit Zeitstempel erstellt und diese Assembly in diesem neuen Verzeichnis durchsucht

aber ich habe es geschafft, dies zu lösen durch Aktivieren der Bereitstellung und Hinzufügen der angegebenen Datei unter Lokale Testeinstellung -> Bereitstellung

Verwandte Themen