Udostępnij przez


Generowanie testów jednostkowych na potrzeby testów fuzz przy użyciu IntelliTest

Narzędzie IntelliTest eksploruje kod platformy .NET w celu generowania danych testowych i zestawu testów jednostkowych. Dla każdej instrukcji w kodzie generowane są dane wejściowe testowe, które będą wykonywać instrukcję . Analiza przypadku jest wykonywana dla każdej gałęzi warunkowej w kodzie. Na przykład instrukcje if, asercje oraz wszystkie operacje, które mogą zgłaszać wyjątki, są analizowane. Ta analiza służy do generowania danych testowych dla sparametryzowanego testu jednostkowego dla każdej z metod, tworząc testy jednostkowe z wysokim pokryciem kodu. Pomyśl o tym jako inteligentne rozmyte testowanie, które ogranicza dane wejściowe i przypadki testowe do tych, które wykonują wszystkie gałęzie logiki i sprawdzają wyjątki.

Po uruchomieniu narzędzia IntelliTest można łatwo sprawdzić, które testy kończą się niepowodzeniem, i dodać dowolny niezbędny kod, aby je naprawić. Możesz wybrać, które z wygenerowanych testów mają być zapisywane w projekcie testowym, aby zapewnić pakiet regresji. Podczas zmiany kodu uruchom ponownie narzędzie IntelliTest, aby zachować zsynchronizowanie wygenerowanych testów ze zmianami kodu.

Uwaga / Notatka

Narzędzie IntelliTest jest przestarzałe w programie Visual Studio 2026. W programie Visual Studio 2022 narzędzie IntelliTest jest obsługiwane tylko dla programu .NET Framework i jest ograniczone do programu Visual Studio Enterprise. Obsługa platformy .NET 6 była ograniczona tylko do wersji zapoznawczej.

Uwaga / Notatka

W programie Visual Studio 2022 narzędzie IntelliTest jest obsługiwane tylko dla programu .NET Framework i jest ograniczone do programu Visual Studio Enterprise. Obsługa platformy .NET 6 była ograniczona tylko do wersji zapoznawczej.

Dostępność i rozszerzenia

Polecenia menu Utwórz IntelliTest i Uruchom IntelliTest:

  • Są dostępne tylko w wersji Enterprise w programie Visual Studio.

  • Obsługa tylko kodu w języku C#, który jest przeznaczony dla platformy .NET Framework.

  • rozszerzalne i obsługują emitowanie testów w formacie MSTest, MSTest V2, NUnit i xUnit.

  • Nie obsługuje konfiguracji x64 (wymaga wersji zapoznawczej).

Eksplorowanie: korzystanie z narzędzia IntelliTest do eksplorowania kodu i generowania testów jednostkowych

Aby wygenerować testy jednostkowe, typy muszą być publiczne.

  1. Otwórz rozwiązanie w programie Visual Studio, a następnie otwórz plik klasy zawierający metody, które chcesz przetestować.

  2. Kliknij prawym przyciskiem myszy metodę i wybierz polecenie Uruchom narzędzie IntelliTest , aby wygenerować testy jednostkowe dla kodu w metodzie.

    Zrzut ekranu przedstawiający kliknięcie prawym przyciskiem myszy metody w celu wygenerowania testów jednostkowych.

    Narzędzie IntelliTest uruchamia kod wiele razy z różnymi danymi wejściowymi. Każdy przebieg jest przedstawiony w tabeli zawierającej dane wejściowe testu oraz wynikowe dane wyjściowe lub wyjątek.

    Zrzut ekranu przedstawiający okno Wyniki eksploracji.

Aby wygenerować testy jednostkowe dla wszystkich metod publicznych w klasie, wystarczy kliknąć prawym przyciskiem myszy klasę, a nie określoną metodę, a następnie wybrać polecenie Uruchom IntelliTest. Użyj listy rozwijanej w oknie Wyniki eksploracji , aby wyświetlić testy jednostkowe i dane wejściowe dla każdej metody w klasie.

Zrzut ekranu przedstawiający wyniki testów do przeglądania z listy.

W przypadku testów, które przeszły, sprawdź, czy raportowane wyniki w kolumnie wyników są zgodne z oczekiwaniami dotyczącymi kodu. W przypadku testów, które kończą się niepowodzeniem, popraw kod zgodnie z potrzebami. Następnie uruchom ponownie narzędzie IntelliTest, aby zweryfikować poprawki.

Zachowaj: zapisywanie testów jednostkowych jako pakiet testów regresji

  1. Wybierz wiersze danych, które chcesz zapisać przy użyciu sparametryzowanego testu jednostkowego w projekcie testowym.

    Zrzut ekranu przedstawiający zapisywanie wyników testu.

    Można wyświetlić projekt testowy i sparametryzowany test jednostkowy, który został utworzony — poszczególne testy jednostkowe, odpowiadające każdemu z wierszy, są zapisywane w pliku .g.cs w projekcie testowym, a sparametryzowany test jednostkowy jest zapisywany w odpowiednim pliku .cs . Możesz uruchomić testy jednostkowe i wyświetlić wyniki w Eksploratorze testów tak samo jak w przypadku wszystkich testów jednostkowych utworzonych ręcznie.

    Zrzut ekranu przedstawiający zapisane testy w Eksploratorze rozwiązań.

    Wszystkie niezbędne odwołania są również dodawane do projektu testowego.

    Jeśli kod metody ulegnie zmianie, uruchom ponownie narzędzie IntelliTest, aby zachować synchronizację testów jednostkowych ze zmianami.

Pomoc: używanie narzędzia IntelliTest do koncentracji uwagi na eksploracji kodu

  1. Jeśli masz bardziej złożony kod, narzędzie IntelliTest ułatwia skoncentrowanie się na eksploracji kodu. Jeśli na przykład masz metodę, która ma interfejs jako parametr, i istnieje więcej niż jedna klasa, która implementuje ten interfejs, IntelliTest odnajduje te klasy i zgłasza ostrzeżenie.

    Wyświetl ostrzeżenia, aby zdecydować, co chcesz zrobić.

    Zrzut ekranu przedstawiający wyświetlanie ostrzeżeń.

  2. Po zbadaniu kodu i zrozumieniu, co chcesz przetestować, możesz naprawić ostrzeżenie, aby wybrać klasy używane do testowania interfejsu.

    Zrzut ekranu przedstawiający ostrzeżenie o poprawce.

    Ten wybór zostanie dodany do pliku PexAssemblyInfo.cs .

    [assembly: PexUseType(typeof(Camera))]

  3. Teraz możesz ponownie uruchomić narzędzie IntelliTest, aby wygenerować sparametryzowany test jednostkowy i przetestować dane tylko przy użyciu naprawionej klasy.

    Zrzut ekranu przedstawiający ponowne uruchamianie narzędzia IntelliTest po naprawieniu.

Określ: Użyj narzędzia IntelliTest, aby zweryfikować właściwości poprawności określone w kodzie

Określ ogólną relację między danymi wejściowymi i wyjściowymi, które mają zostać zweryfikowane przez wygenerowane testy jednostkowe. Ta specyfikacja jest hermetyzowana w metodzie, która wygląda jak metoda testowa, ale jest powszechnie kwantyfikowana. Jest to sparametryzowana metoda testowania jednostkowego i wszelkie asercje muszą obowiązywać dla wszystkich możliwych wartości wejściowych, które może wygenerować IntelliTest.

Pytania i odpowiedzi

.: Czy można użyć narzędzia IntelliTest do niezarządzanych kodów?

A: Nie, narzędzie IntelliTest działa tylko z kodem zarządzanym.

.: Kiedy wygenerowany test kończy się powodzeniem lub niepowodzeniem?

A: Jeśli nie wystąpią żadne wyjątki, przebiegnie ono podobnie jak każdy inny test jednostkowy. Nie powiedzie się, jeśli jakakolwiek asercja zakończy się niepowodzeniem lub jeśli testowany kod zgłasza nieobsłużony wyjątek.

Jeśli masz test, który może przejść, jeśli zostały zgłoszone określone wyjątki, możesz ustawić jeden z następujących atrybutów na podstawie wymagań na poziomie metody testowej, klasy testowej lub zestawu:

  • PexAllowedExceptionAttribute

  • PexAllowedExceptionFromTypeAttribute

  • PexAllowedExceptionFromTypeUnderTestAttribute

  • PexAllowedExceptionFromAssemblyAttribute

.: Czy mogę dodać założenia do sparametryzowanego testu jednostkowego?

A: Tak, użyj założeń, aby określić, które dane testowe nie są wymagane dla testu jednostkowego dla określonej metody. PexAssume Użyj klasy , aby dodać założenia. Można na przykład dodać założenie, że zmienna lengths nie ma wartości null w następujący sposób:

PexAssume.IsNotNull(lengths);

W przypadku dodania założenia i ponownego uruchomienia narzędzia IntelliTest dane testowe, które nie są już istotne, zostaną usunięte.

.: Czy mogę dodać asercji do sparametryzowanego testu jednostkowego?

A: Tak, narzędzie IntelliTest sprawdzi, czy to, co deklarujesz w swoim twierdzeniu, jest rzeczywiście poprawne podczas uruchamiania testów jednostkowych. Użyj klasy PexAssert lub interfejsu API asercji dostarczanego z frameworkiem testowym, aby dodać asercje. Można na przykład dodać potwierdzenie, że dwie zmienne są równe.

PexAssert.AreEqual(a, b);

Jeśli dodasz asercji i uruchom ponownie narzędzie IntelliTest, sprawdzi, czy potwierdzenie jest prawidłowe, a test zakończy się niepowodzeniem, jeśli tak nie jest.

.: Czy mogę wygenerować sparametryzowane testy jednostkowe bez wcześniejszego uruchomienia narzędzia IntelliTest?

A: Tak, kliknij prawym przyciskiem myszy klasę lub metodę, a następnie wybierz polecenie Utwórz intelliTest.

Zrzut ekranu przedstawiający tworzenie narzędzia IntelliTest.

Zaakceptuj format domyślny, aby wygenerować testy lub zmienić sposób, w jaki projekt i testy są nazwane. Możesz utworzyć nowy projekt testowy lub zapisać testy w istniejącym projekcie.

Zrzut ekranu przedstawiający tworzenie narzędzia IntelliTest z ustawieniem domyślnym MSTest.

.: Czy mogę używać innych struktur testów jednostkowych z funkcją IntelliTest?

A: Tak, wykonaj następujące kroki, aby znaleźć i zainstalować inne platformy. Rozszerzenia platformy testowej są również dostępne w witrynie Visual Studio Marketplace, na przykład w generatorze testów NUnit.

Po ponownym uruchomieniu programu Visual Studio i ponownym otwarciu rozwiązania kliknij prawym przyciskiem myszy klasę lub metodę, a następnie wybierz polecenie Utwórz narzędzie IntelliTest. Wybierz zainstalowaną platformę tutaj:

Zrzut ekranu przedstawiający wybieranie innej struktury testów jednostkowych dla środowiska IntelliTest.

Następnie uruchom narzędzie IntelliTest, aby wygenerować poszczególne testy jednostkowe w odpowiednich plikach .g.cs .

.: Czy mogę dowiedzieć się więcej na temat sposobu generowania testów?

A: Tak, aby uzyskać ogólne omówienie, przeczytaj ten wpis w blogu.