8

Ambiente

  • Visual Studio 2012 Premium Update 3
  • Team Foundation Server 2012 Update 3
  • edit: .NET Framework 4
  • DefaultTemplate (DefaultTemplate.11.1.xaml)
    • Visual Studio test Runner
      • Piattaforma di destinazione: X86

Problema

Ho 2 Unit-Test-Assemblee:Microsoft Falsi & TFS 2012 Visual Studio Test Runner - prova falliscano sporadicamente

  • ExtensionTests
  • UserTests

utilizzano entrambi il framework di Microsoft Fakes (utilizzando Stubs e Shim).

Esecuzione dei test di unità funziona a livello locale bene (testato su 4 macchine diverse, anche sul Visual Studio installato sul server build), se costruiamo con un agente di compilazione, alcuni test di unità fallisce con l'eccezione, ad esempio, :

Unable to create instance of class UserTests.ClientUserTest. Error: System.TypeLoadException: Could not load type 'WorldDirect.CCM.Shared.Backend.SmartClassic.Fakes.StubClient' from assembly 'WorldDirect.Smart.Backend.Fakes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. 

o lo stesso per uno spessore:

Test method ExtensionTests.ExtensionTests.UpdateExtensionValidate_NoGrnp_ChecksIpPbxDependencies threw exception: System.TypeLoadExceptio: Could not load type    'WorldDirect.CCM.Shared.Backend.SmartClassic.Fakes.ShimIpPbxRemoteDestination' from assembly 'WorldDirect.Smart.Backend.Fakes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. 

la cosa interessante è, non riescono sporadicamente, ho cercato di recuperare un po 'di statistiche:

012.351.641.061.
#  | Outcome   | Comment 
19 | 64/64 passed | only 'UserTests'-UnitTests run, 'ExtensionTests' inactive 
20 | 37/64 passed | same source code as #19 
21 | 64/64 passed | same source code as #19 

22 | 64/66 passed | all 'UserTests' run as well as 2 'ExtensionTests', others still inactive; the 2 ExtensionTests failed with ShimIpPbxRemoteDestination-TypeLoadException 
23 | 38/65 passed | same source code as #22, notice NOTHING has changed, however 1 unit test was not even run in 'ExtensionTests'; however the second succeeds; all unit tests in 'UserTests' using MS Fakes fail with a StubClient-TypeLoadException 
24 | 38/65 passed | same source code as #22 

new day - no more luck :-(

    1  | 37/64 passed | uncommented the 2 'ExtensionTests', so same code as #19 
    2  | 37/64 passed | so same code as #1 
    3  | 64/64 passed | so same code as #1; suddenly they all work again 

Si noti che accanto alle modifiche menzionate nessuno ha modificato il codice sorgente.
Tutte le build sono state create utilizzando un livello di registro dettagliato; Shim Diagnostic = "true";
solo shim/stubs esplicitamente necessari sono inclusi nel file .fakes (otherwhise MSBUILD non riusciva a utilizzare exit-code 1).

Mi sembra tutto abbastanza magico, forse qualcuno ha già avuto gli stessi problemi o qualcuno ha un suggerimento.

Grazie in anticipo

+1

Si prega di inviare un bug con un piccolo progetto che riproduce il problema su http://connect.Microsoft.com/VisualStudio. –

+1

Il bug è aperto, consultare https://connect.microsoft.com/VisualStudio/feedback/details/794458/microsoft-fakes-tfs-2012-visual-studio-test-runner-unit-test-fail-sporadically – shadowrunner

+0

Grazie . Abbiamo iniziato a lavorarci oggi. –

risposta

9

credo di sapere se la questione rientra, il TypeNotFoundException era corretta, almeno i tipi corrispondenti non sono stati generati (come mostrato dalla Reflector), questo mi ha fatto pensare. Più esattamente c'è un solo file falso generato per assemblaggio che giace sotto [buildName] \ Binaries- e come entrambi i miei Assemblati hanno simulato lo stesso Assembly (backend.dll) - questo è risultato molto probabilmente in una condizione di competizione - l'unico assembly che è stato costruito più tardi rispetto all'altra ha generato i suoi spessori/stub finali; questo però non chiarisce tutti i problemi.

In ogni caso il motivo per cui questo non viene visualizzato in una normale build VS è perché gli assembly sono generati nella loro rispettiva directory [assembly] \ FakeAssembly, non influenzando nessun altro test di unità (nel modo in cui dovrebbe essere) .

Quindi la mia idea di aggirare questo problema era di mettere TUTTI gli shim/stub usati da entrambi gli assembly di test in entrambi i file di configurazione .fakes; riflettore ha mostrato che spessori davvero bisogno/stub ricevuti generati questa volta, tuttavia l'accumulo non riuscita con

Exception Message: MSBuild error 1 has ended this build. 

Senza ulteriori informazioni in qualsiasi (dettagliata) di log. Questo problema è causato dal non utilizzo di uno shim/stub-object generato specificato nel file .fakes (e ovviamente questo è anche un problema mostrato dal server di compilazione, altrimenti sarebbe troppo noioso ;-)).

Quindi la soluzione finale che ho trovato è di inserire TUTTO il codice che fa uso di shim/stub nello stesso assieme, dove solo 1 .fakes-file configura il finto assemblaggio.

Ora si sta lavorando bene :-), ma penso che il MS-Dev-Team ha ancora qualcosa da fare qui, non hanno provato con TFS2013 però; presenterò un bug comunque (come ho già scoperto 2)

Spero che questo aiuti qualcuno con lo stesso problema.

Problemi correlati