SpecFlow unit-test fehlgeschlagen wegen nicht in der Lage zu finden, “TechTalk.SpecFlow" Datei
Habe ich ein VS2010-unit-test-Projekt mit SpecFlow 1.8.1 und mstest. Um die SpecFlow unit-tests zu arbeiten, habe ich Folgendes getan:-
- Habe ich noch die Verweise auf die folgenden Dateien in meinem Projekt:-
Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll TechTalk.SpecFlow.dll
Beachten Sie, dass die TechTalk.SpecFlow.dll Hinzugefügt wurde in meinem Projekt und der Verweis auf diese Datei.
- Ich habe den "Copy Local" - Eigenschaft des TechTalk.SpecFlow.dll Verweis auf True.
- Außerdem habe ich eine App.Config, die angibt, "MsTest.2010" als Anbieter, und regeneriert alle code-behinds für die SpecFlow Funktionen.
Alles funktioniert in meinem VS2010, die tests laufen erfolgreich sowohl in der SpecFlow testrunner und die mstest-test-runner. ABER wenn ich versuche zu laufen, die mstests in TFS 2008 (mit einem .vsmdi-test-list-Datei), es konnte nicht mit der folgenden Ausnahme:-
Class Initialization method MyNamespace.MyTestFeature.FeatureSetup threw exception.
System.Configuration.ConfigurationErrorsException:
System.Configuration.ConfigurationErrorsException: An error occurred creating the
configuration section handler for specFlow: Could not load file or assembly
'TechTalk.SpecFlow' or one of its dependencies. The system cannot find the file
specified. (D:\Projects\TestProject\TestResults\administrator_MYPC 2012-06-27
18_30_05_Any CPU_Debug\Out\TestProject.DLL.config line 4) --->
System.IO.FileNotFoundException: Could not load file or assembly 'TechTalk.SpecFlow'
or one of its dependencies. The system cannot find the file specified.
Beachten Sie, dass die TFS gebaut, das Projekt in Ordnung und es läuft andere Komponententests im gleichen Projekt (normal mstests, nicht SpecFlow) ohne Probleme. Es nur nicht für die SpecFlow Tests läuft.
Also was mache ich falsch?
Bearbeiten: Die Inhalte meiner App.Config-Datei sieht wie folgt aus:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section
name="specFlow"
type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow"/>
</configSections>
<specFlow>
<unitTestProvider name="MsTest.2010" />
<runtime detectAmbiguousMatches="true"
stopAtFirstError="false"
missingOrPendingStepsOutcome="Inconclusive" />
<trace traceSuccessfulSteps="true"
traceTimings="false"
minTracedDuration="0:0:0.1" />
</specFlow>
</configuration>
Ich habe die App.Config-Datei Inhalt wie oben.
Beachten Sie, dass ich mit VS2010, also mein Anbieter hat "MsTest.2010", nicht "MsTest".
Vielleicht ist das die Ursache - ich bin mit VS2010 auch.
Funktioniert nicht. Gleichen Fehler. 🙁
InformationsquelleAutor SF Lee | 2012-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Befolgen der Anweisungen auf diese Website und diese Website:
den Befehl
Tools > Library Package Manager > Package Manager Console
ermöglicht IhnenPM> Install-Package SpecFlow
wenn die Anweisungen gibt "erfolgreich installiert", die SpecFlow Montage nun erscheint in den Referenzen des Projekts. Und das MSTest-Projekt nun kompiliert, erfolgreich (zumindest für mich).
InformationsquelleAutor Stephane Rolland
Ich habe diesen Fehler auch, in meinem Fall das problem war, dass ich mit dem \...\obj\Debug||Release\ - Ordner als Ziel-und nicht die \...\bin\Debug||Release\ - Ordner. Auf der Suche in diesen Ordnern, die ich sah, dass der TechTalk.dll Montage fehlte der ehemalige. Einfach wechseln bei meinem .bat-Datei, die das problem war behoben.
InformationsquelleAutor Peter
Manchmal VS2013 ist auf der Suche nach SpecRun dlls nicht im Projekt-Ordner, aber in
C:\Users\**YOUR_USER**\AppData\Local\Temp\VisualStudioTestExplorerExtensions\SpecRun.Runner.1.3.0\tools
. So brauchen Sie nur, um alle notwendigen SpecFlow Bibliotheken therelInformationsquelleAutor Grushman
Einen hack fand ich, um es arbeiten zu fügen Sie eine weitere Klasse für JEDE einzelne SpecFlow feature, dass ich im Projekt erstellt. Die Klasse sieht wie folgt aus:-
Ich betrachte das als ein ganz fieser hack, aber es bietet einen Anhaltspunkt, warum es nicht funktioniert hat. Es wäre gut, wenn jemand kommt mit einer eleganten Lösung.
InformationsquelleAutor SF Lee
Schließlich fand ich die richtige Lösung für dieses Problem. Ich muss nur hinzufügen, ein post-build-Ereignis zu entfernen .config-Datei aus dem build-output. (Die App.config-Datei verwendet wird nur zum generieren der code-behind-während der design-Zeit. Es ist überhaupt nicht verwendet werden, während der Laufzeit, so kann es entfernt werden).
Den Befehl für die post-build-event sieht wie folgt aus:-
Korrektur: Die .config-Datei für die Generierung keine eindeutigen Ergebnisse, so dass eine bessere post-build-event-Befehl ist wie folgt:-
Ein besserer Weg ist, um zu überprüfen $(IsDesktopBuild), so dass die .config Datei wird nicht gelöscht beim ausführen von Visual Studio.
InformationsquelleAutor SF Lee