Testowanie biblioteki klas platformy .NET przy użyciu programu Visual Studio
Ważne
Firma Microsoft ogłosiła wycofanie Visual Studio dla komputerów Mac. Visual Studio dla komputerów Mac nie będą już obsługiwane od 31 sierpnia 2024 r. Alternatywy obejmują:
- Program Visual Studio Code z zestawem deweloperskim języka C# i powiązanymi rozszerzeniami, takimi jak .NET MAUI i Unity.
- Program Visual Studio uruchomiony w systemie Windows na maszynie wirtualnej na komputerze Mac.
- Program Visual Studio uruchomiony w systemie Windows na maszynie wirtualnej w chmurze.
Aby uzyskać więcej informacji, zobacz Visual Studio dla komputerów Mac ogłoszenie o wycofaniu.
W tym samouczku pokazano, jak zautomatyzować testowanie jednostkowe przez dodanie projektu testowego do rozwiązania.
Wymagania wstępne
- Ten samouczek współpracuje z rozwiązaniem utworzonym w temacie Tworzenie biblioteki klas platformy .NET przy użyciu Visual Studio dla komputerów Mac.
Tworzenie projektu testu jednostkowego
Testy jednostkowe zapewniają zautomatyzowane testowanie oprogramowania podczas opracowywania i publikowania. MSTest to jedna z trzech platform testowych, z których można wybrać. Pozostałe to xUnit i nUnit.
Uruchom Visual Studio dla komputerów Mac.
ClassLibraryProjects
Otwórz rozwiązanie utworzone w sekcji Tworzenie biblioteki klas platformy .NET przy użyciu Visual Studio dla komputerów Mac.W okienku rozwiązania kliknij rozwiązanie
ClassLibraryProjects
, a następnie wybierz pozycję Dodaj>nowy projekt.W oknie dialogowym Nowy projekt wybierz pozycję Testy w węźle Sieć Web i konsola. Wybierz projekt MSTest, a następnie pozycję Dalej.
Wybierz pozycję .NET 5.0 jako platformę docelową, a następnie wybierz pozycję Dalej.
Nadaj nowej nazwie nowy projekt "StringLibraryTest" i wybierz pozycję Utwórz.
Program Visual Studio tworzy plik klasy z następującym kodem:
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
Kod źródłowy utworzony przez szablon testu jednostkowego wykonuje następujące czynności:
- Importuje przestrzeń nazw zawierającą Microsoft.VisualStudio.TestTools.UnitTesting typy używane do testowania jednostkowego.
- TestClassAttribute Stosuje atrybut do
UnitTest1
klasy. - Stosuje atrybut TestMethodAttribute do
TestMethod1
.
Każda metoda oznaczona tagiem [TestMethod] w klasie testowej oznaczonej tagiem [TestClass] jest wykonywana automatycznie po uruchomieniu testu jednostkowego.
Dodawanie odwołania do projektu
Aby projekt testowy działał z klasą StringLibrary
, dodaj odwołanie do StringLibrary
projektu.
W okienku rozwiązania kliknij klawisze Zależności w obszarze StringLibraryTest. Wybierz pozycję Dodaj odwołanie z menu kontekstowego.
W oknie dialogowym Odwołania wybierz projekt StringLibrary. Wybierz przycisk OK.
Dodawanie i uruchamianie metod testów jednostkowych
Gdy program Visual Studio uruchamia test jednostkowy, wykonuje każdą metodę oznaczoną atrybutem TestMethodAttribute w klasie oznaczonej atrybutem oznaczonym atrybutem TestClassAttribute . Metoda testowa kończy się po znalezieniu pierwszego błędu lub gdy wszystkie testy zawarte w metodzie zakończyły się pomyślnie.
Najbardziej typowe testy wywołuje elementy członkowskie Assert klasy. Wiele metod asercyjnych obejmuje co najmniej dwa parametry, z których jeden jest oczekiwanym wynikiem testu, a drugi jest rzeczywistym wynikiem testu. Niektóre z Assert
najczęściej nazywanych metodami klasy przedstawiono w poniższej tabeli:
Metody asertywne | Function |
---|---|
Assert.AreEqual |
Sprawdza, czy dwie wartości lub obiekty są równe. Asercja kończy się niepowodzeniem, jeśli wartości lub obiekty nie są równe. |
Assert.AreSame |
Sprawdza, czy dwie zmienne obiektu odwołują się do tego samego obiektu. Asercja kończy się niepowodzeniem, jeśli zmienne odwołują się do różnych obiektów. |
Assert.IsFalse |
Sprawdza, czy warunek to false . Asercja kończy się niepowodzeniem, jeśli warunek to true . |
Assert.IsNotNull |
Sprawdza, czy obiekt nie null jest . Asercja kończy się niepowodzeniem, jeśli obiekt ma wartość null . |
Możesz również użyć Assert.ThrowsException metody w metodzie testowej, aby wskazać typ wyjątku, który powinien zostać zgłoszony. Test kończy się niepowodzeniem, jeśli określony wyjątek nie zostanie zgłoszony.
Podczas testowania StringLibrary.StartsWithUpper
metody chcesz podać wiele ciągów, które zaczynają się od znaku wielkiej litery. Oczekujesz, że metoda zwróci true
się w tych przypadkach, aby można było wywołać metodę Assert.IsTrue . Podobnie chcesz podać wiele ciągów, które zaczynają się od innego znaku niż wielkie litery. Oczekujesz, że metoda zwróci false
się w tych przypadkach, aby można było wywołać metodę Assert.IsFalse .
Ponieważ metoda biblioteki obsługuje ciągi, chcesz również upewnić się, że pomyślnie obsługuje pusty ciąg (String.Empty
), prawidłowy ciąg, który nie ma znaków i którego Length ma wartość 0, oraz null
ciąg, który nie został zainicjowany. Możesz wywołać StartsWithUpper
metodę statyczną bezpośrednio i przekazać pojedynczy String argument. Możesz też wywołać StartsWithUpper
metodę rozszerzenia dla zmiennej przypisanej string
do null
metody .
Zdefiniujesz trzy metody, z których każda wywołuje metodę Assert dla każdego elementu w tablicy ciągów. Wywołasz przeciążenie metody, które umożliwia określenie komunikatu o błędzie, który ma być wyświetlany w przypadku niepowodzenia testu. Komunikat identyfikuje ciąg, który spowodował błąd.
Aby utworzyć metody testowe:
Otwórz plik UnitTest1.cs i zastąp kod następującym kodem:
using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, string.Format("Expected for '{0}': true; Actual: {1}", word, result)); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word, result)); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = { string.Empty, null }; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, result)); } } } }
Test wielkich liter w
TestStartsWithUpper
metodzie zawiera literę wielkiej litery greckiej alfa (U+0391) i cyrylica wielka litera EM (U+041C). Test małych liter w metodzieTestDoesNotStartWithUpper
zawiera małą literę alfa (U+03B1) i małą literę Cyrylica Ghe (U+0433).Na pasku menu wybierz pozycję Plik>Zapisz jako. W oknie dialogowym upewnij się, że ustawienie Kodowanie ma wartość Unicode (UTF-8).
Po wyświetleniu monitu o zastąpienie istniejącego pliku wybierz pozycję Zamień.
Jeśli nie zapiszesz kodu źródłowego jako pliku zakodowanego w formacie UTF8, program Visual Studio może zapisać go jako plik ASCII. W takim przypadku środowisko uruchomieniowe nie dekoduje dokładnie znaków UTF8 poza zakresem ASCII, a wyniki testu nie będą poprawne.
Otwórz panel Testy jednostkowe po prawej stronie ekranu. Wybierz pozycję Wyświetl>testy z menu.
Kliknij ikonę Dock, aby pozostawić panel otwarty.
Kliknij przycisk Uruchom wszystko.
Wszystkie testy kończą się powodzeniem.
Obsługa niepowodzeń testów
Jeśli wykonujesz programowanie oparte na testach (TDD), najpierw piszesz testy i kończą się one niepowodzeniem przy pierwszym uruchomieniu. Następnie dodasz kod do aplikacji, który sprawia, że test zakończy się pomyślnie. Na potrzeby tego samouczka utworzono test po napisaniu kodu aplikacji, który jest weryfikowany, więc nie zaobserwowano niepowodzenia testu. Aby sprawdzić, czy test zakończy się niepowodzeniem, gdy oczekujesz, że zakończy się niepowodzeniem, dodaj nieprawidłową wartość do danych wejściowych testu.
Zmodyfikuj tablicę
words
w metodzieTestDoesNotStartWithUpper
, aby uwzględnić ciąg "Błąd". Nie musisz zapisywać pliku, ponieważ program Visual Studio automatycznie zapisuje otwarte pliki podczas kompilowania rozwiązania w celu uruchamiania testów.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Uruchom ponownie testy.
Tym razem okno Eksplorator testów wskazuje, że dwa testy zakończyły się pomyślnie i jeden zakończył się niepowodzeniem.
Ctrl-kliknij test niepowodzenie,
TestDoesNotStartWithUpper
i wybierz polecenie Pokaż okienko wyników z menu kontekstowego.W okienku Wyników zostanie wyświetlony komunikat wygenerowany przez asercję: "Assert.IsFalse nie powiodło się. Oczekiwano wartości "Błąd": false; rzeczywiste: prawda". Ze względu na błąd nie zostały przetestowane żadne ciągi w tablicy po przetestowaniu błędu.
Usuń ciąg "Błąd", który został dodany w kroku 1. Uruchom ponownie test i testy przejdą.
Testowanie wersji biblioteki
Teraz, gdy wszystkie testy zostały wykonane podczas uruchamiania kompilacji debugowania biblioteki, uruchom testy dodatkowego czasu względem kompilacji wydania biblioteki. Wiele czynników, w tym optymalizacji kompilatora, może czasami generować różne zachowanie między kompilacjami debugowania i wydania.
Aby przetestować kompilację wydania:
Na pasku narzędzi programu Visual Studio zmień konfigurację kompilacji z Debuguj na Wydanie.
W okienku rozwiązania kliknij prawym przyciskiem myszy projekt StringLibrary i wybierz pozycję Kompiluj z menu kontekstowego, aby ponownie skompilować bibliotekę.
Uruchom ponownie testy jednostkowe.
Testy kończą się powodzeniem.
Debugowanie testów
Jeśli używasz Visual Studio dla komputerów Mac jako środowiska IDE, możesz użyć tego samego procesu pokazanego w artykule Samouczek: debugowanie aplikacji konsolowej platformy .NET przy użyciu Visual Studio dla komputerów Mac do debugowania kodu przy użyciu projektu testów jednostkowych. Zamiast uruchamiać projekt aplikacji ShowCase , naciśnij klawisze Ctrl i kliknij projekt StringLibraryTests , a następnie wybierz pozycję Rozpocznij debugowanie projektu z menu kontekstowego.
Program Visual Studio uruchamia projekt testowy z dołączonym debugerem. Wykonanie zostanie zatrzymane w dowolnym punkcie przerwania dodanym do projektu testowego lub bazowego kodu biblioteki.
Dodatkowe zasoby
Następne kroki
W tym samouczku przetestowano bibliotekę klas. Bibliotekę można udostępnić innym osobom, publikując ją w pakiecie NuGet . Aby dowiedzieć się, jak to zrobić, postępuj zgodnie z samouczkiem NuGet:
Jeśli publikujesz bibliotekę jako pakiet NuGet, inne osoby mogą je instalować i używać. Aby dowiedzieć się, jak to zrobić, postępuj zgodnie z samouczkiem NuGet:
Biblioteka nie musi być dystrybuowana jako pakiet. Może być on powiązany z aplikacją konsolową, która z niej korzysta. Aby dowiedzieć się, jak opublikować aplikację konsolową, zobacz wcześniejszy samouczek z tej serii:
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla