Microsoft Fakes und TFS 2012 Visual Studio Test Runner - Komponententest schlägt sporadisch fehl

8

Umgebung

  • Visual Studio 2012 Premium-Update 3
  • Team Foundation Server 2012-Update 3
  • bearbeiten: .NET Framework 4
  • DefaultTemplate (DefaultTemplate.11.1.xaml)
    • Visual Studio Test Runner
      • Zielplattform: X86

Problem

Ich habe 2 Unit-Test-Assemblies:

  • ExtensionTests
  • Benutzertests

verwenden beide das Microsoft Fakes Framework (mit Stubs und Shims).

Die lokale Ausführung der Komponententests funktioniert Fein (getestet auf vier verschiedenen Computern, sogar auf dem auf dem Build-Server installierten Visual Studio). Wenn wir jedoch einen Build-Agent erstellen, schlägt ein Komponententest fehl die Ausnahme, zB:

%Vor%

oder das Gleiche für eine Unterlegscheibe:

%Vor%

Das Interessante ist, sie scheitern sporadisch, ich habe versucht, ein paar Statistiken zu erfinden:

%Vor%

Beachten Sie, dass neben den genannten Änderungen niemand den Quellcode geändert hat.
Alle Builds wurden mit einer detaillierten Log-Ebene erstellt; Shim Diagnostic="wahr";
Nur explizit benötigte Shims / Stubs sind in der .fakes-Datei enthalten (ansonsten konnte MSBUILD den Exit-Code 1 nicht verwenden).

Es scheint mir ziemlich magisch zu sein, möglicherweise hat jemand schon die gleichen Probleme oder jemand hat einen Hinweis.

Vielen Dank im Voraus

    
shadowrunner 18.07.2013, 07:18
quelle

1 Antwort

9

Ich denke, ich weiß, wo das Problem liegt, die TypeNotFoundException war korrekt, zumindest die entsprechenden Typen wurden nicht erzeugt (wie von Reflector gezeigt), das hat mich zum Nachdenken gebracht. Genauer gesagt gibt es nur eine generierte Fake-Datei, die pro Assembly unter [buildName] \ Binaries erzeugt wurde und da beide Assemblies dieselbe Assembly (backend.dll) vortäuschten - dies führte höchstwahrscheinlich zu einer Race Condition - die eine Assembly, die wurde später gebaut als der andere hatte seine endgültigen Shims / Stubs generiert; das klärt jedoch nicht alle Probleme.

Der Grund, warum dies bei einem regulären VS-Build nicht angezeigt wird, ist, dass die Assemblys im jeweiligen [assembly] \ FakeAssemblies-Verzeichnis generiert werden und keinen anderen Komponententest beeinflussen (so wie es sein sollte).

Also meine Idee, dieses Problem zu umgehen, bestand darin, ALLE Shims / Stubs, die von beiden Test-Assemblies verwendet wurden, in beide .fakes-Konfigurationsdateien zu schreiben; Der Reflektor zeigte, dass wirklich alle benötigten Shims / Stubs diesmal generiert wurden, der Build jedoch mit

fehlgeschlagen ist %Vor%

Keine weiteren Informationen mehr in einem (detaillierten) Protokoll. Dieses Problem wird dadurch verursacht, dass ein generiertes Shim / Stub-Objekt, das in der .fakes-Datei angegeben ist, nicht verwendet wird (und natürlich ist dies auch ein Problem, das gerade vom Build-Server angezeigt wird; ansonsten zu langweilig;)).

Die letzte Lösung, die ich gefunden habe, ist ALLEN Code, der Shims / Stubs verwendet, in dieselbe Assembly zu stellen, wo nur 1 .fakes-file die fake-Assembly konfiguriert.

Jetzt funktioniert es gut :-), aber ich denke, das MS-Dev-Team hat noch etwas zu tun, habe es aber nicht mit TFS2013 getestet; Ich werde sowieso einen Fehler einreichen (wie ich bereits 2 entdeckt habe)

Hoffe das hilft jemandem mit dem gleichen Problem.

    
shadowrunner 19.07.2013, 05:18
quelle