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.
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:
- Uruchom polecenie Analizuj pokrycie kodu.
- 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:
.*
- 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:
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.