specflow schlägt fehl, wenn versucht wird, einen Testausführungsbericht zu generieren

8

Ich habe ein Projekt, das mit SpecFlow, NUnit und Coypu Akzeptanztests für eine Webanwendung durchführt. Ich habe das Projekt über Jenkins auf einem Build-Server in Ordnung gebracht. Jenkins ruft ein psake-Skript auf, das msbuild im specs-Projekt ausführt, dann ruft das Skript die nunit-Konsole auf, um die Spezifikationen / Tests auszuführen, und dann möchte ich einen Bericht von SpecFlow generieren.

%Vor%

Der letzte Aufruf von specflow.exe schlägt jedoch mit:

fehl
  

Das Element & lt; Parametergruppe & gt; unterhalb des Elements & lt; UsingTask & gt; wird nicht erkannt. C: \ Programme (x86) \ Jenkins \ jobs \ TheWebApp \ workspace \ Web \ Sites \ TheWebApp.nuget \ nuget.targets

Ein bisschen googeln deutet an, dass es vielleicht ein Problem mit der verwendeten msbuild-Version ist (zB hier , hier ). Aber ich habe Framework "4.0" in meinem psake-Skript und das Specs-Projekt zielt auf .NET Framework 4.0, und es baut gut im Build-Schritt, so dass ich nicht sicher bin, warum specflow scheint eine frühere Version von Msbuild zu verwenden. Oder ist das Problem vielleicht anderswo?

    
ngm 06.07.2012, 13:33
quelle

2 Antworten

29
___ answer14268435 ___

Ich habe versucht, die oben vorgeschlagene Konfigurationsdateilösung zu verwenden. Es funktionierte für Tests vor Ort, aber sobald ich meinen Code in unsere CI-Umgebung geschoben hatte, erstickte er daran, da die CI-Umgebung diese Konfigurationsdatei nicht hatte. Wir beschränken die CI-Umgebung darauf, nur saubere Versionen der verschiedenen Pakete zu verwenden. Daher wollten wir nicht versuchen, die spezielle Konfiguration in den CI-Server zu injizieren.

Wir haben festgestellt, dass SpecFlow problemlos mit einigen unserer .NET 4.0-Projekte ohne die spezielle Konfigurationsdatei funktioniert. Nach ein wenig Nachforschungen scheint das eigentliche "Problem" NuGet 2.1 zu sein. Alles funktioniert gut für .NET 4.0-Projekte mit NuGet 1.7.

Irgendwo zwischen 1.7 und 2.1 führte NuGet neue Funktionen in der NuGet.targets-Datei ein, die von den älteren Versionen von MSBuild nicht unterstützt werden. Insbesondere scheint das Problem das %code% unterhalb des Elements %code% zu sein, wie durch die Fehlermeldung erklärt.

Ein flüchtiger Blick auf die Datei targets zeigt an, dass der Abschnitt dafür verantwortlich ist, NuGet auf dem neuesten Stand zu halten. Wenn Sie diesen Abschnitt vollständig entfernen, wird das Problem auf die gleiche Weise behoben wie durch das Hinzufügen der obigen Konfigurationsdatei, wobei jedoch auch die Selbstaktualisierungsfunktionalität entfernt wird, die scheinbar vorhanden ist. Da die .targets-Datei für das Repository festgeschrieben ist, funktioniert diese Lösung auch in unserer CI-Umgebung ohne Änderungen auf der CI-Seite.

Es ist nicht unbedingt eine bessere Lösung als ngms, es ist nur eine andere. Abhängig von Ihrer Umgebung ist dies möglicherweise ein besserer Weg oder vielleicht auch nicht.

    
___ tag123specflow ___ Ein BDD-Tool (Behavior-Driven Development) für .NET. ___ qstntxt ___

Ich habe ein Projekt, das mit SpecFlow, NUnit und Coypu Akzeptanztests für eine Webanwendung durchführt. Ich habe das Projekt über Jenkins auf einem Build-Server in Ordnung gebracht. Jenkins ruft ein psake-Skript auf, das msbuild im specs-Projekt ausführt, dann ruft das Skript die nunit-Konsole auf, um die Spezifikationen / Tests auszuführen, und dann möchte ich einen Bericht von SpecFlow generieren.

%Vor%

Der letzte Aufruf von specflow.exe schlägt jedoch mit:

fehl
  

Das Element & lt; Parametergruppe & gt; unterhalb des Elements & lt; UsingTask & gt; wird nicht erkannt. C: \ Programme (x86) \ Jenkins \ jobs \ TheWebApp \ workspace \ Web \ Sites \ TheWebApp.nuget \ nuget.targets

Ein bisschen googeln deutet an, dass es vielleicht ein Problem mit der verwendeten msbuild-Version ist (zB hier , hier ). Aber ich habe %code% in meinem psake-Skript und das Specs-Projekt zielt auf .NET Framework 4.0, und es baut gut im Build-Schritt, so dass ich nicht sicher bin, warum specflow scheint eine frühere Version von Msbuild zu verwenden. Oder ist das Problem vielleicht anderswo?

    
___ qstnhdr ___ specflow schlägt fehl, wenn versucht wird, einen Testausführungsbericht zu generieren ___ tag123msbuild ___ Die Microsoft Build Engine, auch bekannt als MSBuild, ist eine Build-Plattform für verwalteten Code und war Teil von .NET Framework. ___
ngm 11.07.2012, 10:44
quelle
2

Ich habe versucht, die oben vorgeschlagene Konfigurationsdateilösung zu verwenden. Es funktionierte für Tests vor Ort, aber sobald ich meinen Code in unsere CI-Umgebung geschoben hatte, erstickte er daran, da die CI-Umgebung diese Konfigurationsdatei nicht hatte. Wir beschränken die CI-Umgebung darauf, nur saubere Versionen der verschiedenen Pakete zu verwenden. Daher wollten wir nicht versuchen, die spezielle Konfiguration in den CI-Server zu injizieren.

Wir haben festgestellt, dass SpecFlow problemlos mit einigen unserer .NET 4.0-Projekte ohne die spezielle Konfigurationsdatei funktioniert. Nach ein wenig Nachforschungen scheint das eigentliche "Problem" NuGet 2.1 zu sein. Alles funktioniert gut für .NET 4.0-Projekte mit NuGet 1.7.

Irgendwo zwischen 1.7 und 2.1 führte NuGet neue Funktionen in der NuGet.targets-Datei ein, die von den älteren Versionen von MSBuild nicht unterstützt werden. Insbesondere scheint das Problem das <ParameterGroup> unterhalb des Elements <UsingTask> zu sein, wie durch die Fehlermeldung erklärt.

Ein flüchtiger Blick auf die Datei targets zeigt an, dass der Abschnitt dafür verantwortlich ist, NuGet auf dem neuesten Stand zu halten. Wenn Sie diesen Abschnitt vollständig entfernen, wird das Problem auf die gleiche Weise behoben wie durch das Hinzufügen der obigen Konfigurationsdatei, wobei jedoch auch die Selbstaktualisierungsfunktionalität entfernt wird, die scheinbar vorhanden ist. Da die .targets-Datei für das Repository festgeschrieben ist, funktioniert diese Lösung auch in unserer CI-Umgebung ohne Änderungen auf der CI-Seite.

Es ist nicht unbedingt eine bessere Lösung als ngms, es ist nur eine andere. Abhängig von Ihrer Umgebung ist dies möglicherweise ein besserer Weg oder vielleicht auch nicht.

    
Mir 10.01.2013 22:28
quelle

Tags und Links