Podstawowe informacje o teście jednostkowym

W tym temacie opisano podstawy zapisywania i Uruchamianie testów jednostek w Visual Studio Eksploratora testów.Ten temat zawiera następujące sekcje:

Omówienie testowania jednostek

  • Szybkie uruchamianie

W przykładzie MyBank rozwiązania

Tworzenie projektów testu jednostki

Zapisywanie testów

Uruchamianie testów w Eksploratorze testów

  • Uruchamianie i przeglądanie testy na pasku narzędzi Eksploratora testów

  • Uruchamianie testów po każdym kompilacji

  • Filtrowanie i grupowanie listy testu

Testy jednostek debugowania

Dodatkowych narzędzi do testów jednostkowych

  • Generowanie kodu aplikacji z testów

  • Generowanie wielu testów za pomocą metody testów opartych na danych

  • Trwa analizowanie pokrycie kodu testu jednostki

  • Izolowanie metody testu jednostki z Microsoft Fakes

Omówienie testowania jednostek

Program Visual Studio Test Eksploratora umożliwia programistom oraz zespołom, które integrują testowania jednostek w ich oprogramowania wytwarzania oprogramowania.Testowania jednostek pomaga zapewnić prawidłowości programu poprzez weryfikację, że kod aplikacji nie oczekiwań na to.W przypadku testowania jednostek, analiza funkcjonalność programu do odnajdywania dyskretnych testować zachowania, które można przetestować jako osobę jednostek.Możesz użyć testowania struktury jednostek do tworzenia testów zachowaniami i zgłosić wyniki tych testów.

Testowania jednostek ma największy wpływ, gdy jest integralną część przepływu pracy tworzenia oprogramowania.Jak najszybciej po napisaniu funkcji lub innych bloku kodu aplikacji, można utworzyć testy jednostek, który Sprawdź zachowanie kod w odpowiedzi na standardowy, granic i przypadków nieprawidłowe dane wejściowe, a wszelkie założenia jawnych lub niejawnych wprowadzone przez kod należy sprawdzić, która.W praktyce rozwoju oprogramowania, znane jako testowanie kierowany rozwoju, przed napisaniem kodu, a więc korzystamy testy jednostek jako dokumentacja i specyfikacji funkcjonalnych funkcji tworzenia testów jednostkowych.

Eksploratora testów zapewnia elastyczne i wydajne sposób uruchamiania testów jednostkowych i wyświetlaj ich wyniki w programie Visual Studio.Program Visual Studio instaluje testowania struktury dla kodu zarządzanego i macierzystego jednostek firmy Microsoft.Eksploratora testów można również uruchomić innych firm oraz typu open source, struktur testów jednostek, które wdrożyła interfejsy dodatku Eksploratora testów.Możesz dodać wiele z tych struktur za pośrednictwem Menedżera rozszerzeń programu Visual Studio i galerii Visual Studio.Zobacz Porady: instalacja frameworków testów jednostkowych innych firm.

Widoki Eksploratora testów można wyświetlić wszystkie testy lub tylko testy, które zostały zakończone pomyślnie, nie powiodło się, nie został jeszcze wykonany lub zostać pominięte.Testy w dowolnym widoku można filtrować przy szukanego tekstu w polu wyszukiwania na poziomie globalnym lub zaznaczając jedno wstępnie zdefiniowanych filtrów.Wybór wszystkie testy można uruchomić w dowolnym momencie.Przy użyciu Visual Studio Ultimate, Uruchamianie testów automatycznie po każdym kompilacji.Wyniki testu są od razu widoczne na pasku przebiegu/niepowodzenia u góry okna Eksploratora.Szczegóły wyniku metody testów są wyświetlane, gdy wybierz test.

Szybkie uruchamianie

Wprowadzenie do testowania jednostek, które umożliwia przejście bezpośrednio do kodowania zobacz jeden z tych kwestii:

W przykładzie MyBank rozwiązania

W tym temacie, korzystamy z rozwoju fikcyjna aplikacji o nazwie MyBank przykładem.Rzeczywisty kod nieprzestrzegania wyjaśnienia w tym temacie nie jest konieczne.Metody testu są napisany w języku C# i udostępnione za pomocą struktury testów jednostek firmy Microsoft dla kodu zarządzanego, jednak pojęcia łatwo są przekazywane do innych języków i struktur.

Rozwiązanie MyBank

Nasze pierwsza próba projektowania dla MyBank aplikacja zawiera składnik kont, który reprezentuje konto prywatne i jego transakcji z Bankiem i składnika bazy danych, który zapewnia funkcje do agregacji i Zarządzaj kontami poszczególnych.

Utwórz MyBank rozwiązania, który zawiera dwa projekty:

  • Accounts

  • BankDb

Nasze pierwsza próba projektowania Accounts projekt zawiera klasę do przechowywania podstawowych informacji o koncie interfejs, który określa typowe funkcje dowolnego typu konta, takich jak składania i wycofania zasoby z konta, a klasa pochodna od interfejs, który reprezentuje rachunku rozliczeniowego.Firma Microsoft projektów kont Tworzenie rozpoczyna się od następujących plików źródłowych:

  • AccountInfo.csDefiniuje podstawowe informacje na koncie użytkownika.

  • IAccount.csDefiniuje standardowego IAccountinterfejs dla konta, w tym metod do złożenia i wycofywania zasoby z konta i pobrać saldo konta.

  • CheckingAccount.cszawiera CheckingAccount klasa, która implementuje IAccounts interfejs dla konta rozliczeniowego.

Wiemy z doświadczenia jest tego jeden element, które musi wykonać wycofanie z konta rozliczeniowego, aby upewnić się, że ilości wycofanych jest mniejsza niż saldo konta.Tak, firma Microsoft musi zostać zastąpiona w IAccount.Withdaw metody w CheckingAccount z metodę, która sprawdza, czy dla tego warunku.Metoda może wyglądać tak:

public void Withdraw(double amount)
{
    if(m_balance >= amount)
    {
        m_balance -= amount;
    }
    else
    {
        throw new ArgumentException(amount, "Withdrawal exceeds balance!")
    }
}

Obecnie mamy kodu jest czasu na potrzeby testowania.

Tworzenie projektów testu jednostki

Projekt testu jednostki zazwyczaj odzwierciedla strukturę projektu jeden kod.W tym przykładzie MyBank, dodaj dwa projekty testu jednostki o nazwie AccountsTests i BankDbTests do MyBanks rozwiązania.Nazwy projektu testu są dowolne, ale przyjmująca standardową konwencją nazewnictwa jest dobrze.

Aby dodać projekt testu jednostki do rozwiązania:

  1. Na pliku menu, wybierz polecenie nowy , a następnie wybierz projektu (klawiatura Ctrl + Shift + N).

  2. W oknie dialogowym Nowy projekt rozwiń zainstalowane węzła, wybierz język, w którym chcesz używać dla swojego projektu testu, a następnie wybierz testowanie.

  3. Aby użyć jednej z struktur testów jednostek firmy Microsoft, wybierz polecenie projektu testowania jednostek z listy Szablony projektów.W przeciwnym razie wybierz szablon projektu jednostki struktury testów, który ma być używany.Aby przetestować Accounts projektu naszych przykładu, czy nazwa projektu AccountsTests.

    Informacje dotyczące przestrogiPrzestroga

    Nie wszystkie struktur testów jednostek innych firm oraz typu open source zapewniają szablon projektu programu Visual Studio.Informacje na temat tworzenia projektu, zapoznaj się z dokumentem struktury.

  4. W projekcie testu jednostki Dodaj odwołanie do projektu kodu w obszarze testów w naszym przykładzie do projektu kont.

    Aby utworzyć odwołanie do projektu, kod:

    1. Wybierz projekt w Eksploratorze rozwiązań.

    2. Na projektu menu, wybierz polecenie Dodaj odwołanie.

    3. W oknie dialogowym Menedżera odwołania Otwórz rozwiązanie węzła i wybierz polecenie projektów.Wybierz nazwę projektu kodu i zamknąć okno dialogowe.

Każdy projekt testu jednostki zawiera klasy, które odzwierciedlają nazwy klasy w projekt kodu.W naszym przykładzie AccountsTests projekt zawiera następujące klasy:

  • AccountInfoTestsKlasa zawiera metody testów jednostkowych dla AccountInfo klasy w BankAccount projektu

  • CheckingAccountTestsKlasa zawiera metody testów jednostkowych dla CheckingAccount klasy.

Zapisywanie testów

Testowanie jednostkowe struktury, którego używasz i Visual Studio IntelliSense poprowadzi Cię przez proces tworzenia testów jednostkowych dla projekt kodu.Aby uruchomić Eksploratora testów, struktur większości wymagają, aby dodać określonych atrybutów, aby zidentyfikować metody testu jednostki.Struktury umożliwiają także — zazwyczaj za pośrednictwem potwierdzenia instrukcji lub atrybuty metody — aby wskazać, czy metoda badania ma powodzeniem lub niepowodzeniem.Inne atrybuty zidentyfikować metody opcjonalne ustawienia podczas inicjowania klasy, a przed uruchomieniem każdej metody badania i usuwanie metody, które są uruchamiane po każdej metody i przed klasy.

Wzorzec AAA (Rozmieść czynność, potwierdzenia) to często stosowana metoda pisania testów jednostkowych dla metody w obszarze testu.

  • Rozmieść sekcję Metoda testu jednostki inicjuje obiekty i ustawia wartość danych, który jest przekazywany do metody w obszarze testu.

  • Act sekcji wywołuje metodę badanych z parametrami uszeregowanych.

  • Potwierdzenia sekcji sprawdza, czy akcja metody badanych działa zgodnie z oczekiwaniami.

Do przetestowania CheckingAccount.Withdraw metody naszym przykładzie, firma Microsoft może zapisywać dwóch testów: jeden weryfikujący standardowe zachowanie metody, a drugie sprawdza, czy wycofanie więcej niż saldo zakończy się niepowodzeniem.W CheckingAccountTests klasy, dodamy następujących metod:

[TestMethod]
public void Withdraw_ValidAmount_ChangesBalance()
{
    // arrange
    double currentBalance = 10.0;
    double withdrawal = 1.0;
    double expected = 9.0;
    var account = new CheckingAccount("JohnDoe", currentBalance);
    // act
    account.Withdraw(withdrawal);
    double actual = account.Balance;
    // assert
    Assert.AreEqual(expected, actual);
}

[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void Withdraw_AmountMoreThanBalance_Throws()
{
    // arrange
    var account = new CheckingAccount("John Doe", 10.0);
    // act
    account.Withdraw(1.0);
    // assert is handled by the ExpectedException
}

Należy pamiętać, że Withdraw_ValidAmount_ChangesBalance używa jawny Assert poufności, aby określić, czy metoda test zakończy się pomyślnie lub nie powiedzie się, aż Withdraw_AmountMoreThanBalance_Throws używa ExpectedException atrybut do określenia Powodzenie metody.Pod maską struktury testów jednostkowych koduje metody testów w instrukcji spróbuj/catch.W większości przypadków Jeśli wystąpił wyjątek metody badania nie powiedzie się i wyjątek jest ignorowana.ExpectedException Atrybutu powoduje, że metoda testu do przekazywania, jeśli określony wyjątek.

Aby uzyskać więcej informacji na temat struktur testowania jednostek firmy Microsoft Zobacz jeden z następujących tematów:

Ustawianie limitów czasu

Aby ustawić limit czasu na poszczególne metody:

[TestMethod]
[Timeout(2000)]  // Milliseconds
public void My_Test()
{ ...
}

Aby ustawić limit czasu na maksymalny dozwolony:

[TestMethod]
[Timeout(TestTimeout.Infinite)]  // Milliseconds
public void My_Test ()
{ ...
}

Uruchamianie testów w Eksploratorze testów

Podczas tworzenia projektu testowego, testy są widoczne w Eksploratora testów.Eksploratora testów nie jest widoczny, wybierz polecenie testu w menu programu Visual Studio, wybierz polecenie Windows, a następnie wybierz Eksploratora testów.

Eksploratora testów jednostkowych

Podczas uruchamiania, zapisu i uruchom ponownie testów domyślnego widoku Eksploratora testów wyświetla wyniki w grupach testy nie powiodło się,, przekazany testów, pominięto testów i nie Uruchom testy.Można wybrać nagłówek grupy, aby otworzyć widok zawierający wszystkie ich testów w tej grupie.

Uruchamianie i przeglądanie testy na pasku narzędzi Eksploratora testów

Na pasku narzędzi Eksploratora testów ułatwia odnajdywanie, organizowanie i Uruchamianie testów, które są Państwo zainteresowani.

Uruchamianie testów z paska narzędzi Eksploratora testów

Można wybrać Uruchom wszystko do uruchamiania wszystkich testów, lub opcję Uruchom można wybrać podzbiór testów do uruchomienia.Po uruchomieniu zestaw testów podsumowanie przebieg testu pojawi się u dołu okna Eksploratora testów.Wybierz test, aby wyświetlić szczegóły test w okienku u dołu.Wybierz Open testowanie z menu kontekstowego (klawiatura: F12) do wyświetlania kodu źródłowego dla wybranego testu.

Uruchamianie testów po każdym kompilacji

Informacje dotyczące przestrogiPrzestroga

Testy jednostek uruchomione, po każdym kompilacji jest obsługiwana tylko w programie Visual Studio Ultimate.

Uruchom po kompilacji

Do uruchamiania testów jednostkowych po każdym lokalną kompilację, wybierz testu standardowego menu, wybierz polecenie Uruchom testy po tworzenia na pasku narzędzi Eksploratora testów.

Filtrowanie i grupowanie listy testu

Jeśli masz dużą liczbę prób, można wpisać w polu wyszukiwania Eksploratora testów, aby filtrować listę według określonego ciągu.Można ograniczyć zdarzenia filtru więcej przez wybranie opcji z listy filtrów.

Przeszukaj kategorie filtru

Przycisk grupy Eksploratora testów

Grupowanie testów wg kategorii, wybierz Group By przycisku.

Aby uzyskać więcej informacji, zobacz Przeprowadzanie testów jednostkowych za pomocą narzędzia Eksplorator testów.

Testy jednostek debugowania

Aby rozpocząć sesję debugowania dla testów, można użyć Eksploratora testów.Krokowe kodu z debugerem programu Visual Studio bezproblemowe przejście i z powrotem między testy jednostek i projektu w obszarze testu.Aby rozpocząć debugowanie:

  1. W edytorze programu Visual Studio ustawienia punktu przerwania w metodach testów, które chcesz debugować.

    [!UWAGA]

    Ponieważ metody badania można uruchomić w dowolnej kolejności, ustawianie punktów przerwania, w przypadku wszystkich metod do debugowania.

  2. Eksplorator Test, należy wybrać metody testu, a następnie wybierz debugowanie wybrane testy z menu skrótów.

Aby uzyskać więcej informacji na temat debuger, zobacz Debugowanie w Visual Studio.

Dodatkowych narzędzi do testów jednostkowych

Generowanie kodu aplikacji z testów

Jeśli przed napisaniem projekt kodu podczas pisania testów, możesz korzystać z technologii IntelliSense do utworzenia klas i metod w kodzie projektu.Napisze instrukcję, metodę testu, która wywołuje klasy lub metody, która ma zostać wygenerowany, a następnie otwórz menu IntelliSense w wywołaniu.Jeśli połączenie należy do konstruktora klasy nowe, wygenerować nowy typ z menu i wykonaj polecenia kreatora, aby wstawić klasy projekt kodu.Jeśli połączenie należy do metody, wygenerować nową metodę z IntelliSense menu.

Generowanie metody skrótową Intellisense Menu

Generowanie wielu testów za pomocą metody testów opartych na danych

[!UWAGA]

Te procedury mają zastosowanie tylko do testowania metody, które można zapisać przy użyciu struktury testów jednostkowych firmy Microsoft dla kodu zarządzanego.Jeśli używasz innej struktury, zajrzyj do dokumentacji struktury podobne funkcje.

Metody testów opartych na danych umożliwiają Sprawdź zakres wartości w metodzie testu pojedynczej jednostki.Aby utworzyć metodę testu jednostki opartego na danych, dekoracji metodę za pomocą DataSource atrybut określający, źródła danych i będzie tabeli, która zawiera wartości zmiennych, które ma zostać przetestowana.W treści metody przypisujesz wartości wierszy zmiennych za pomocą TestContext.DataRow[ColumnName] indeksatora.

Przypuśćmy na przykład, dodamy metody niepotrzebne do CheckingAccount klasy o nazwie AddIntegerHelper.AddIntegerHelperdodaje dwóch liczb całkowitych.

Do tworzenia opartych na danych test na AddIntegerHelper metody, najpierw tworzymy bazy danych programu Access o nazwie AccountsTest.accdb i tabela o nazwie AddIntegerHelperData.AddIntegerHelperData Tabeli określa kolumny, aby określić pierwszy i drugi argumentów operacji dodawania i kolumnę, aby określić oczekiwane wyniki.Liczba wierszy możemy wypełnić odpowiednie wartości.

    [DataSource(
        @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Projects\MyBank\TestData\AccountsTest.accdb", 
        "AddIntegerHelperData"
    )]
    [TestMethod()]
    public void AddIntegerHelper_DataDrivenValues_AllShouldPass()
    {
        var target = new CheckingAccount();
        int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
        int y = Convert.ToInt32(TestContext.DataRow["SecondNumber"]); 
        int expected = Convert.ToInt32(TestContext.DataRow["Sum"]);
        int actual = target.AddIntegerHelper(x, y);
        Assert.AreEqual(expected, actual);
    }

Metoda nadany jest wykonywane raz dla każdego wiersza w tabeli.Eksploratora testów zgłasza błąd testu metody, jeśli wystąpi o — błąd.W okienku szczegółów wyniki testów w przypadku metody zawiera metodę stan przebiegu/błędów dla każdego wiersza danych.

Aby uzyskać więcej informacji, zobacz Porady: tworzenie testu jednostkowego opartego na danych.

Trwa analizowanie pokrycie kodu testu jednostki

[!UWAGA]

Pokrycie kodu testu jednostki jest dostępna dla macierzystych i zarządzanych, a wszystkie struktur testów jednostek, które mogą być uruchamiane przez strukturę testowania jednostek.

Można określić ilość kodu produktu, który jest rzeczywiście testowana przez testy jednostek, za pomocą narzędzia pokrycie kodu Visual Studio.Pokrycie kodu można uruchomić testy wybranych lub wszystkich testów w rozwiązaniu.Okno wyniki pokrycie kodu wyświetla wartość procentowa bloków kodu produktu, które zostały wykonane wiersza, funkcja, klasa, nazw i w module.

Aby uruchomić pokrycie kodu dla metod testów w rozwiązaniu,

  1. Wybierz testy w menu programu Visual Studio, a następnie wybierz analizy pokrycia kodu.

  2. Wybierz jedną z następujących poleceń:

    1. Wybrane testy uruchamia metody test wybrano Eksploratora testów.

    2. Wszystkie testy uruchamia wszystkie metody testów w rozwiązaniu.

Pokrycie wyniki są wyświetlane w oknie Wyniki pokrycie kodu.

Wyniki pokrycie kodu

Aby uzyskać więcej informacji, zobacz Korzystanie z pokrycia kodu do określania, jaka część kodu jest poddawana testom.

Izolowanie metody testu jednostki z Microsoft Fakes

[!UWAGA]

Microsoft Fakes jest dostępna tylko w programie Visual Studio Ultimate.Microsoft Fakes można użyć tylko z metody testów, które można zapisać przy użyciu struktur testów jednostek dla kodu zarządzanego.

Problem

Metody testu jednostki, które szczególny nacisk położono na weryfikowanie wewnętrzny kod w funkcji mogą być trudne do zapisu, gdy metoda w obszarze połączenia testowe funkcje, które służą jako wprowadzenie zależności zewnętrznych.Na przykład metody CheckingAccount przykład klasy prawdopodobnie powinna prowadzić rozmowy BankDb składnik do aktualizacji głównej bazy danych.Firma Microsoft może refactor CheckingAccount klasy do wyszukiwania, takie jak następujące:

class CheckingAccount : IAccount
{
    public CheckingAccount(customerName, double startingBalance, IBankDb bankDb)
    {
        m_bankDb = bankDb;
        // set up account
    }

    public void Withdraw(double amount)
    {
        if(m_balance >= amount)
        {
            m_balance = m_MyBankDb.Withdraw(m_accountInfo.ID, amount);
        }
        else
        {
            throw new ArgumentException(amount, "Withdrawal exceeds balance!")
        }
    }

    private IBankDb m_bankDb = null;
    // ...

Testy jednostek tego CheckingAccount.Withdraw metody można teraz nie powiodło się z powodu problemów spowodowanych wywołanie m_bankDb.Withdraw.Baza danych lub połączenie sieciowe mogą zostać utracone lub uprawnień w bazie danych może być nieprawidłowy.Niepowodzenie w m_bankDB.Withdraw połączenie spowodowałoby testu kończy się niepowodzeniem przyczyn, które nie są powiązane z jego wewnętrznego kodu.

Rozwiązania Microsoft Fakes

Microsoft Fakes tworzy zestawu, który zawiera klasy i metody, które można zastąpić dla klas, metod testu jednostki, powodujące zależności.Klasę zastępczych w module Fakes wygenerowanego określa metodę oraz delegata w każdej z metod publicznych w składniku docelowego.W metodzie badania implementowania delegata można utworzyć dokładną zachowanie wywołania zależności w metodzie, która ma zostać przetestowana.

W naszym przykładzie, możesz stworzyć w zestawie Fakes dla BankDb projektu, a następnie użyć StubIBankDb klasa, która jest generowany przez Fakes i który pochodzi od IBankDb interfejsu do usunięcia wątpliwości spowodowany interakcji z bazą danych.Wersja modyfikować Withdraw_ValidAmount_ChangesBalance metoda będzie następnie następująca:

[TestMethod]
public void Withdraw_ValidAmount_ChangesBalance()
{
    // arrange
    double currentBalance = 10.0;
    double withdrawal = 1.0;
    double expected = 9.0;

    // set up the Fakes object and delegate
    var stubBankDb = new MyBank.Stubs.StubIBankDb();
    stubBankDb.WithdrawDoubleDouble = (id, amount) => { return 9.0; }
    var account = new CheckingAccount("JohnDoe", currentBalance, stubBankDb);

    // act
    account.Withdraw(withdrawal);
    double actual = account.Balance;

    // assert
    Assert.AreEqual(expected, actual);
}

Ten wiersz w metodzie badania:

stubBankDb.WithdrawDoubleDouble = (id, amount) => { return 9.0; }

implementuje delegować Fakes Withdraw metody za pomocą wyrażenia lamba.stubBankDb.Withdraw Metoda wywołuje delegata i zawsze zwraca określony przedział włącza metodę test można zweryfikować niezawodnie zachowanie Accounts metody.

Więcej informacji na temat Microsoft Fakes

Microsoft Fakes używa utworzenie klas zastępczych na dwa sposoby:

  1. Procedury wejścia generowania klasy zastępczych pochodzące od interfejsu nadrzędnej klasy docelowej zależności.Skrótowa metody mogą zastąpić wirtualnego metod publicznych klasy docelowej.

  2. Ustawienia użyć instrumentation środowiska wykonawczego na kierowanie wywołania metody docelowej do metody podkładka zastępczych dla metod niewirtualnego.

W obu przypadkach efekt służy do w metodzie badania określić zachowanie, która ma zostać wygenerowany delegatów wywołania metody zależności.

Aby uzyskać więcej informacji, zobacz Izolowanie testowanego kodu za pomocą struktury Microsoft Fakes.