Udostępnij za pośrednictwem


Rozwiązywanie problemów z pokryciem kodu

Dotyczy: Visual Studio

Narzędzie do analizy pokrycia kodu w programie Visual Studio zbiera dane dla zestawów natywnych i zarządzanych (.dll lub plików .exe ). Jednak w niektórych przypadkach w oknie Wyniki pokrycia kodu jest wyświetlany błąd podobny do "Puste wyniki wygenerowane: ....". Ten artykuł ułatwia rozwiązywanie problemów i rozwiązywanie różnych powodów, dla których mogą wystąpić puste wyniki.

Co należy zobaczyć?

Jeśli wybierzesz polecenie Analizuj pokrycie kodu w menu Test , a kompilacja i testy zostaną uruchomione pomyślnie, powinna zostać wyświetlona lista wyników w oknie Pokrycie kodu. Aby wyświetlić szczegółowe informacje, należy rozwinąć elementy.

Zrzut ekranu przedstawiający wyniki pokrycia kodu z kolorowaniem.

Aby uzyskać więcej informacji, zobacz Używanie pokrycia kodu w celu określenia, ile kodu jest testowane.

Możliwe przyczyny braku wyników lub wyświetlania starych wyników

Nie używasz właściwej wersji programu Visual Studio

Potrzebujesz programu Visual Studio Enterprise.

Nie zostały wykonane żadne testy

Analiza

Sprawdź w oknie danych wyjściowych. Na liście rozwijanej Pokaż dane wyjściowe wybierz pozycję Testy. Sprawdź, czy są zarejestrowane jakieś błędy lub ostrzeżenia.

Wyjaśnienie

Analiza pokrycia kodu odbywa się podczas wykonywania testów. Zawiera ona tylko te zestawy, które są ładowane do pamięci podczas wykonywania testów. Jeśli żaden z testów nie zostanie wykonany, nie ma nic do pokrycia kodu do raportowania.

Rozwiązanie

W Eksploratorze testów wybierz pozycję Uruchom wszystko , aby sprawdzić, czy testy zostały uruchomione pomyślnie. Napraw wszelkie błędy przed użyciem funkcji Analizuj pokrycie kodu.

Patrzysz na poprzedni wynik

Podczas modyfikowania i ponownego uruchamiania testów poprzedni wynik pokrycia kodu nadal może być widoczny, w tym kolorowanie kodu z tego starego przebiegu. Wykonaj następujące kroki, aby rozwiązać problem:

  1. Uruchom polecenie Analizuj pokrycie kodu.
  2. Upewnij się, że w oknie Wyniki pokrycia kodu wybrano najnowszy zestaw wyników.

Pliki .pdb (symbol) są niedostępne

Analiza

Otwórz folder docelowy kompilacji (zazwyczaj bin\debug) i sprawdź, czy dla każdego zestawu znajduje się plik .pdb w tym samym katalogu co plik .dll lub .exe .

Wyjaśnienie

Aparat pokrycia kodu wymaga, aby każdy zestaw miał skojarzony plik .pdb dostępny podczas przebiegu testu. Jeśli nie ma pliku .pdb dla określonego zestawu, zestaw nie jest analizowany.

Plik .pdb musi zostać wygenerowany na podstawie tej samej kompilacji co pliki .dll lub .exe.

Rozwiązanie

Upewnij się, że ustawienia kompilacji generują plik .pdb .

  • Jeśli pliki .pdb nie są aktualizowane podczas kompilowania projektu, otwórz właściwości projektu, wybierz stronę Kompilacja, wybierz pozycję Zaawansowane i sprawdź informacje o debugowaniu.

  • W programie Visual Studio 2022 i nowszych wersjach dla projektów języka C# przeznaczonych dla platformy .NET Core lub .NET 5+otwórz właściwości projektu, wybierz kartę Kompilacja , wybierz pozycję Ogólne i sprawdź symbole debugowania.

  • W przypadku projektów języka C++ upewnij się, że wygenerowane pliki .pdb mają pełne informacje o debugowaniu. Otwórz właściwości projektu i sprawdź, czy opcja Debugowanie debugowania>konsolidatora>generuje informacje debugowania zoptymalizowana pod kątem udostępniania i publikowania (/DEBUG:FULL).

Jeśli pliki .pdb i .dll lub .exe znajdują się w różnych miejscach, skopiuj plik .pdb do tego samego katalogu. Istnieje również możliwość skonfigurowania aparatu pokrycia kodu w celu wyszukiwania plików .pdb w innej lokalizacji. Aby uzyskać więcej informacji, zobacz Dostosowywanie analizy pokrycia kodu.

Używany jest instrumentowany lub zoptymalizowany plik binarny

Analiza

Ustal, czy plik binarny przeszedł dowolną formę zaawansowanej optymalizacji, takiej jak optymalizacja z przewodnikiem profilu, lub został instrumentowany przez narzędzie profilowania, takie jak vsinstr.exe lub vsperfmon.exe.

Wyjaśnienie

Jeśli zestaw został już zinstrumentowany lub zoptymalizowany przez inne narzędzie profilowania, zestaw jest pominięty z analizy pokrycia kodu. Nie można przeprowadzić analizy pokrycia kodu na takich zestawach.

Rozwiązanie

Wyłącz optymalizację i użyj nowej kompilacji.

Kod nie jest zarządzany (.NET) ani natywny (C++)

Analiza

Ustal, czy uruchamiasz testy w kodzie zarządzanym lub C++.

Wyjaśnienie

Analiza pokrycia kodu w programie Visual Studio jest dostępna tylko dla zarządzanego i natywnego kodu (C++). Jeśli pracujesz z narzędziami innych firm, niektóre lub wszystkie kod mogą być wykonywane na innej platformie.

Rozwiązanie

Brak dostępnych.

Nazwa projektu zawiera element "DataCollector"

Projekty korzystające z obiektu DataCollector w nazwie projektu nie będą identyfikowane przez pokrycie kodu.

Zestaw został zainstalowany przez NGen

Analiza

Ustal, czy zestaw jest ładowany z natywnej pamięci podręcznej obrazów.

Wyjaśnienie

Ze względu na wydajność zestawy obrazów natywnych nie są analizowane. Aby uzyskać więcej informacji, zobacz Ngen.exe (Generator obrazów natywnych).

Rozwiązanie

Należy użyć wersji MSIL zestawu. Nie przetwarzaj go za pomocą narzędzia NGen.

Niestandardowy plik .runsettings ma problemy ze składnią

Analiza

Jeśli używasz niestandardowego pliku .runsettings , może on zawierać błąd składniowy. Pokrycie kodu nie jest uruchamiane, a okno pokrycia kodu nie jest otwarte na końcu przebiegu testu lub pokazuje stare wyniki.

Wyjaśnienie

Testy jednostkowe można uruchamiać przy użyciu niestandardowego pliku .runsettings , aby skonfigurować opcje pokrycia kodu. Opcje te umożliwiają uwzględnianie lub wykluczanie plików. Aby uzyskać więcej informacji, zobacz Dostosowywanie analizy pokrycia kodu.

Rozwiązanie

Istnieją dwa typy możliwych błędów:

  • Błąd XML

    Otwórz plik .runsettings w edytorze XML programu Visual Studio. Poszukaj oznak błędów.

  • Błąd wyrażenia regularnego

    Każdy ciąg znaków w pliku jest wyrażeniem regularnym. Przejrzyj każdy z nich w poszukiwaniu błędów, a w szczególności zwróć uwagę na:

    • Niedopasowane nawiasy (...) lub niewyrównane nawiasy \(...\). Jeśli chcesz dopasować nawiasy w ciągu wyszukiwania, musisz dodać przed nimi znak ucieczki. Na przykład, aby dopasować funkcję do użycia: .*MyFunction\(double\)
    • Gwiazdka lub plus na początku wyrażenia. Aby dopasować dowolny ciąg znaków, użyj kropki, po której następuje gwiazdka: .*

Niestandardowy plik .runsettings z niepoprawnymi wykluczeniami

Analiza

Jeśli używasz niestandardowego pliku .runsettings , upewnij się, że zawiera zestaw.

Wyjaśnienie

Testy jednostkowe można uruchamiać przy użyciu niestandardowego pliku .runsettings , aby skonfigurować opcje pokrycia kodu. Opcje te umożliwiają uwzględnianie lub wykluczanie plików. Aby uzyskać więcej informacji, zobacz Dostosowywanie analizy pokrycia kodu.

Rozwiązanie

Usuń wszystkie Include węzły z pliku .runsettings , a następnie usuń wszystkie Exclude węzły. Jeśli to rozwiąże problem, umieść je z powrotem w etapach.

Upewnij się, że węzeł DataCollectors określa pokrycie kodu. Porównaj go z przykładem w temacie Dostosowywanie analizy pokrycia kodu.

Niektóre kody są zawsze wyświetlane jako niepokryte

Kod inicjowania w natywnych bibliotekach DLL jest wykonywany przed instrumentacją

Analiza

W statycznie połączonym kodzie natywnym część funkcji inicjowania DllMain i kod, który wywołuje, jest czasami wyświetlany jako nieuwzględniany, mimo że kod został wykonany.

Wyjaśnienie

Narzędzie pokrycia kodu działa przez wstawienie instrumentacji do zestawu tuż przed uruchomieniem aplikacji. We wszystkich zestawach załadowanych wcześniej kod inicjowania w dllMain jest wykonywany natychmiast po załadowaniu zestawu i przed uruchomieniem aplikacji. Ten kod wydaje się nie zostać omówiony, co zwykle ma zastosowanie do zestawów ładowanych statycznie.

Rozwiązanie

Brak.

Informacje