Przewodnik: programowanie testowe z funkcją Generowanie na podstawie użycia
W tym temacie pokazano, jak używać funkcji Generowanie na podstawie użycia , która obsługuje programowanie oparte na testach.
Programowanie oparte na testach to podejście do projektowania oprogramowania, w którym najpierw piszesz testy jednostkowe na podstawie specyfikacji produktu, a następnie napisz kod źródłowy wymagany do pomyślnego wykonania testów. Program Visual Studio obsługuje programowanie testowe po raz pierwszy, generując nowe typy i elementy członkowskie w kodzie źródłowym podczas pierwszego odwołowania się do nich w przypadkach testowych, zanim zostaną zdefiniowane.
Program Visual Studio generuje nowe typy i elementy członkowskie z minimalnymi przerwami w przepływie pracy. Można tworzyć wycinki dla typów, metod, właściwości, pól lub konstruktorów bez opuszczania bieżącej lokalizacji w kodzie. Po otwarciu okna dialogowego w celu określenia opcji generowania typu fokus zostanie natychmiast zwrócony do bieżącego otwartego pliku po zamknięciu okna dialogowego.
Funkcja Generowanie na podstawie użycia może być używana z platformami testowymi, które integrują się z programem Visual Studio. W tym temacie przedstawiono platformę Microsoft Unit Testing Framework.
Uwaga
Na komputerze mogą być wyświetlane różne nazwy lub lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio w tym artykule. Być może używasz innej wersji programu Visual Studio lub innych ustawień środowiska. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.
Tworzenie projektu biblioteki klas systemu Windows i projektu testowego
W języku C# lub Visual Basic utwórz nowy projekt Biblioteka klas systemu Windows. Nadaj mu
GFUDemo_VB
nazwę lubGFUDemo_CS
, w zależności od używanego języka.W Eksplorator rozwiązań kliknij prawym przyciskiem myszy ikonę rozwiązania u góry, a następnie wybierz polecenie Dodaj>nowy projekt.
Utwórz nowy projekt testów jednostkowych (.NET Framework).
Dodawanie odwołania do projektu Biblioteka klas
W Eksplorator rozwiązań w projekcie testu jednostkowego kliknij prawym przyciskiem myszy wpis Odwołania i wybierz polecenie Dodaj odwołanie.
W oknie dialogowym Menedżer odwołań wybierz pozycję Projekty, a następnie wybierz projekt biblioteki klas.
Wybierz przycisk OK , aby zamknąć okno dialogowe Menedżer odwołań.
Zapisz rozwiązanie. Teraz możesz rozpocząć pisanie testów.
Generowanie nowej klasy na podstawie testu jednostkowego
Projekt testowy zawiera plik o nazwie UnitTest1. Kliknij dwukrotnie ten plik w Eksplorator rozwiązań, aby otworzyć go w edytorze kodu. Wygenerowano klasę testową i metodę testową.
Znajdź deklarację klasy
UnitTest1
i zmień jej nazwę naAutomobileTest
.Uwaga
Funkcja IntelliSense udostępnia teraz dwie alternatywy dla uzupełniania instrukcji IntelliSense: tryb uzupełniania i tryb sugestii. Użyj trybu sugestii w sytuacjach, w których klasy i składowe są używane przed ich zdefiniowaną definicją. Po otwarciu okna funkcji IntelliSense możesz nacisnąć klawisze Ctrl+Alt+Spacja, aby przełączać się między trybem uzupełniania i trybem sugestii. Aby uzyskać więcej informacji, zobacz Używanie funkcji IntelliSense . Tryb sugestii pomoże podczas wpisywania
Automobile
w następnym kroku.Znajdź metodę
TestMethod1()
i zmień jej nazwę naDefaultAutomobileIsInitializedCorrectly()
. Wewnątrz tej metody utwórz nowe wystąpienie klasy o nazwieAutomobile
, jak pokazano na poniższych zrzutach ekranu. Zostanie wyświetlona falowana podkreślona linia, która wskazuje błąd czasu kompilacji, a żarówka żarówki z błędem Szybkie akcje pojawia się na lewym marginesie lub bezpośrednio poniżej przełącznika po umieszczeniu kursora na nim.Wybierz lub kliknij żarówkę Szybkie akcje . Zostanie wyświetlony komunikat o błędzie informujący, że typ
Automobile
nie jest zdefiniowany. Przedstawiono również niektóre rozwiązania.Kliknij pozycję Generuj nowy typ, aby otworzyć okno dialogowe Generowanie typu. To okno dialogowe zawiera opcje, które obejmują generowanie typu w innym projekcie.
Na liście Project (Projekt) kliknij pozycję GFUDemo_VB lub GFUDemo_CS, aby poinstruować program Visual Studio, aby dodać plik do projektu biblioteki klas zamiast projektu testowego. Jeśli jeszcze nie wybrano, wybierz pozycję Utwórz nowy plik i nadaj mu nazwę Automobile.cs lub Automobile.vb.
Kliknij przycisk OK , aby zamknąć okno dialogowe i utworzyć nowy plik.
W Eksplorator rozwiązań zapoznaj się z węzłem projektu GFUDemo_VB lub GFUDemo_CS, aby sprawdzić, czy jest tam nowy plik Automobile.vb lub Automobile.cs. W edytorze kodu fokus jest nadal w
AutomobileTest.DefaultAutomobileIsInitializedCorrectly
elemecie , co umożliwia kontynuowanie pisania testu z minimalną przerwą.
Generowanie wycinków właściwości
Załóżmy, że specyfikacja produktu wskazuje, że Automobile
klasa ma dwie właściwości publiczne o nazwie Model
i TopSpeed
. Te właściwości muszą być inicjowane przy użyciu wartości domyślnych "Not specified"
i -1
domyślnie konstruktora. Poniższy test jednostkowy sprawdzi, czy domyślny konstruktor ustawi właściwości na poprawne wartości domyślne.
Dodaj następujący wiersz kodu do metody testowej
DefaultAutomobileIsInitializedCorrectly
.Ponieważ kod odwołuje się do dwóch niezdefiniowanych właściwości w elemencie
Automobile
, w obszarzeModel
i pojawia się falisty podkreślony element .TopSpeed
Umieść kursor naModel
i wybierz żarówkę żarówki błędów Szybkich akcji , a następnie wybierz pozycję Generuj właściwość Automobile.Model.Wygeneruj wycinkę
TopSpeed
właściwości w taki sam sposób.Automobile
W klasie typy nowych właściwości są poprawnie wnioskowane z kontekstu.
Generowanie wycinku dla nowego konstruktora
Teraz utworzymy metodę testową, która wygeneruje wycinkę konstruktora w celu zainicjowania Model
właściwości i TopSpeed
. Później dodasz więcej kodu, aby ukończyć test.
Dodaj następującą dodatkową metodę testową do klasy
AutomobileTest
.Kliknij żarówkę błędu Szybkie akcje pod czerwonym wywiórką, a następnie kliknij pozycję Generuj konstruktor w obszarze "Samochody".
Automobile
W pliku klasy zwróć uwagę, że nowy konstruktor zbadał nazwy zmiennych lokalnych, które są używane w wywołaniu konstruktora, znaleźć właściwości, które mają te same nazwy wAutomobile
klasie, i podano kod w treści konstruktora do przechowywania wartości argumentów weModel
właściwościach iTopSpeed
.Po wygenerowaniu nowego konstruktora pod wywołaniem domyślnego konstruktora w pliku
DefaultAutomobileIsInitializedCorrectly
pojawi się faliste podkreślenie. Komunikat o błędzie informuje, żeAutomobile
klasa nie ma konstruktora, który przyjmuje zero argumentów. Aby wygenerować jawny konstruktor domyślny, który nie ma parametrów, kliknij żarówkę żarówki błędów Szybkie akcje, a następnie kliknij pozycję Generuj konstruktor w obszarze "Samochody".
Generowanie wycinku dla metody
Załóżmy, że specyfikacja wskazuje, że nowy Automobile
może zostać umieszczony w IsRunning
stanie, jeśli jego Model
właściwości i TopSpeed
są ustawione na coś innego niż wartości domyślne.
Dodaj następujące wiersze do
AutomobileWithModelNameCanStart
metody .Kliknij żarówkę żarówki błędów Szybkich akcji dla
myAuto.Start
wywołania metody, a następnie kliknij pozycję Generuj metodę "Automobile.Start".Kliknij żarówkę
IsRunning
Szybkie akcje dla właściwości, a następnie kliknij pozycję Generuj właściwość Automobile.IsRunning.Klasa
Automobile
zawiera teraz metodę o nazwieStart()
i właściwość o nazwieIsRunning
.
Uruchamianie testów
W menu Test wybierz pozycję Uruchom>wszystkie testy.
Polecenie Uruchom>wszystkie testy uruchamia wszystkie testy w dowolnych strukturach testowych napisanych dla bieżącego rozwiązania. W tym przypadku istnieją dwa testy i oba te testy kończą się niepowodzeniem zgodnie z oczekiwaniami. Test
DefaultAutomobileIsInitializedCorrectly
kończy się niepowodzeniemAssert.IsTrue
, ponieważ warunek zwracaFalse
wartość . TestAutomobileWithModelNameCanStart
kończy się niepowodzeniem, ponieważStart
metoda wAutomobile
klasie zgłasza wyjątek.Okno Wyniki testów zostało pokazane na poniższej ilustracji.
W oknie Wyniki testu kliknij dwukrotnie każdy wiersz wyników testu, aby przejść do lokalizacji każdego testu.
Implementowanie kodu źródłowego
Dodaj następujący kod do konstruktora domyślnego, aby
Model
TopSpeed
właściwości , iIsRunning
zostały zainicjowane do poprawnych wartości domyślnych"Not specified"
,-1
iFalse
(lubfalse
dla języka C#).Po wywołaniu
Start
metody należy ustawić flagęIsRunning
na true tylko wtedy, gdyModel
właściwości lubTopSpeed
są ustawione na inną niż ich wartość domyślna. Usuń elementNotImplementedException
z treści metody i dodaj następujący kod.
Ponownie uruchom testy
W menu Test wskaż polecenie Uruchom, a następnie kliknij pozycję Wszystkie testy.
Tym razem testy przechodzą pomyślnie. Okno Wyniki testów zostało pokazane na poniższej ilustracji.