2013-02-12 11 views
7

Edycja: Właśnie wypróbowałem to z VS 2010, a problem nie wystąpił. Problem dotyczy tylko VS 2012. Czy to naprawdę może być błąd? Dzieje się tak również na dwóch oddzielnych laptopach, a nawet na laptopie przyjaciela (który właśnie dostał najnowszy kod).Debugger pomijając najnowszy kod zameldowania w VS 2012 - współpracuje z VS 2010

Najpierw zrzut ekranu z problemem. Ta metoda jest wszystkim nowym kodem.

enter image description here

debugger jest pomijanie kodu z mojej ostatniej odprawie. Komentarze w poniższym kodzie wyjaśniają, co się dzieje, gdy debuguję tę metodę. Tak naprawdę nie ma potrzeby, aby spróbować zrozumieć kod; zauważ, że linie kodu są pomijane. Jeśli uważasz, że kod nie pasuje do debugowanego zestawu, proszę, weź ze mną. Zobaczysz, gdzie debugger rozpoznaje nowy kod, ale nie ma istniejącego kodu. Takie zachowanie występuje na dwóch różnych laptopach, po usunięciu kodu z dysku i ponownym uzyskaniu najnowszego. Każdy komentarz informuje, czy debugger trafia w linię.

[TestMethod()] 
[DeploymentItem("PrestoCommon.dll")] 
public void ApplicationShouldBeInstalledTest_UseCase9() 
{ 
    // Debugger hits this line 
    ApplicationServer appServerAccessor = new ApplicationServer(); 

    // Debugger does not hit these next two lines 
    PrivateObject privateObject = new PrivateObject(appServerAccessor); 
    ApplicationServer appServer = ApplicationServerLogic.GetByName("server10"); 

    // Debugger hits this line. Weirdness: both objects are null, and after this line runs, 
    // appServerAccessor is no longer null. 
    appServerAccessor.Id = appServer.Id; 

    // Skips this line 
    ApplicationWithOverrideVariableGroup appWithValidGroup = appServer.ApplicationsWithOverrideGroup[0]; 

    // Debugger hits this line, but F11 doesn't take me into the method. 
    appWithValidGroup.CustomVariableGroup = CustomVariableGroupLogic.GetById("CustomVariableGroups/4"); 

    // Skips this line 
    Assert.AreEqual(true, true); 
} 

Demontaż pokazuje tylko linie kodu, które faktycznie zostały trafione.

enter image description here

Teraz to sprawdzić. Jeśli dodaję nową linię kodu, debugger rozpoznaje ją, a pozostałe linie kodu zmieniają się, o ile są rozpoznawane przez debugger. Tylko druga linia kodu w ramach metody jest nowa.

[TestMethod()] 
[DeploymentItem("PrestoCommon.dll")] 
public void ApplicationShouldBeInstalledTest_UseCase9() 
{ 
    // Debugger hits this line 
    ApplicationServer appServerAccessor = new ApplicationServer(); 

    // New line. It's recognized by the debugger, and it shows up in the disassembly. 
    if (DateTime.Now > DateTime.Now.AddHours(1)) { return; } 

    // Debugger does not hit these next two lines 
    PrivateObject privateObject = new PrivateObject(appServerAccessor); 
    ApplicationServer appServer = ApplicationServerLogic.GetByName("server10"); // Gets hit now. 

    // Debugger hits this line. Weirdness: both objects are null, and after this line runs, 
    // appServerAccessor is no longer null. 
    appServerAccessor.Id = appServer.Id; // No longer gets hit. 

    // Skips this line (now it's getting hit) 
    ApplicationWithOverrideVariableGroup appWithValidGroup = appServer.ApplicationsWithOverrideGroup[0]; 

    // Debugger hits this line, but F11 doesn't take me into the method. Now this gets skipped. 
    appWithValidGroup.CustomVariableGroup = CustomVariableGroupLogic.GetById("CustomVariableGroups/4"); 

    // Skips this line. Still skipped. 
    Assert.AreEqual(true, true); 
} 

I tu częściowy zrzut demontażu, pokazując nową linię kodu:

enter image description here

Jak to się dzieje?

Dodanie do tajemniczości, w pewnym momencie to nawet wrócił:

if (DateTime.Now > DateTime.Now.AddDays(1)) { return; } 

Rzeczy próbowałem:
- Usuwanie kodu źródłowego z dysku twardego i wymusić uzyskać najnowszy
- Naprawa VS 2012
- Czy jakieś VS clean-up
- Używaj VS 2010, kod zmiany, zameldowania otrzymywać z VS 2012
- Reboot
- inne (nie pamiętam al z nich)

+0

czy możesz pokazać klasę 'ForceInstallation'? – MethodMan

+3

Odbuduj swój kod. Poszukaj także procesu testu biegowego w Menedżerze zadań i zatrzymaj go. Może mieć starą wersję twojego kodu. –

+0

Zamknąłem rozwiązanie, ponownie go otworzyłem i przebudowałem. Ten sam problem. Wydaje się, że działa kilka procesów MsBuild. Mam zamiar zrestartować i spróbować ponownie. Opublikuję klasę "ForceInstallation', chociaż nie sądzę, że to jest to. –

Odpowiedz

4

Wygląda na to, że jest to specyficzny test jednostki. W VS 2012:

  • testowy> Ustawienia testowe
  • otwieranie wybranego ustawienia testowe złożyć
  • Dane i Diagnostyka> odznaczyć Code Coverage (Visual Studio 2010)
  • Zastosuj

Uwaga, Miałem zaletę dostępu do kodu źródłowego i pobrałem Presto (http://presto.codeplex.com/).

+1

To działało! Działa to również po prostu odznaczając plik w Test -> Ustawienia testu. –