Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Visual Studio generuje nowe typy i członków z minimalnymi przerwami w przepływie pracy. Możesz tworzyć szkice 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 / Notatka
Instrukcje przedstawione w tym artykule ilustrują najnowszą wersję interaktywnego środowiska projektowego (IDE) dostępnego w programie Visual Studio. Na komputerze mogą być wyświetlane różne nazwy lub lokalizacje niektórych elementów interfejsu użytkownika. Być może używasz innej wersji programu Visual Studio lub różnych 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 . Nazwij to
GFUDemo_VBlubGFUDemo_CS, w zależności od języka, którego używasz.W Eksploratorze 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 Eksploratorze rozwiązań, w projekcie testu jednostkowego, kliknij prawym przyciskiem myszy na 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 Eksploratorze rozwiązań , aby otworzyć go w edytorze kodu. Wygenerowano klasę testową i metodę testową.
Znajdź deklarację klasy
UnitTest1i zmień jej nazwę naAutomobileTest.Uwaga / Notatka
Funkcja IntelliSense udostępnia teraz dwie opcje 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 IntelliSense możesz nacisnąć Ctrl+Alt+Spacja, aby przełączać się między trybem uzupełniania a trybem sugestii. Aby uzyskać więcej informacji, zobacz Używanie funkcji IntelliSense . Tryb sugestii pomoże podczas wpisywania
Automobilew 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 linia podkreślenia, która wskazuje błąd czasu kompilacji, a ikonka błędu w postaci żarówki Szybkie akcje pojawi się na lewym marginesie lub bezpośrednio poniżej falowanej linii po najechaniu na nią kursorem.
Wybierz lub kliknij ikonę żarówki Szybkie akcje. Zostanie wyświetlony komunikat o błędzie informujący, że typ
Automobilenie 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 Projekt kliknij 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 Eksploratorze rozwiązań przejrzyj węzeł projektu GFUDemo_VB lub GFUDemo_CS , aby sprawdzić, czy jest tam nowy plik Automobile.vb lub Automobile.cs . W edytorze kodu kursor nadal znajduje się w
AutomobileTest.DefaultAutomobileIsInitializedCorrectlyelemencie, co pozwala na kontynuowanie pisania testu przy minimalnych zakłóceniach.
Generowanie szablonu 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. Właściwości te muszą być inicjalizowane domyślnymi wartościami "Not specified" i -1 przez domyślny konstruktor. 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
Automobile, podModeliTopSpeedpojawia się falista linia podkreślająca. Umieść kursor naModeli wybierz żarówkę błędów Szybkie akcje, a następnie wybierz pozycję Generuj właściwość 'Automobile.Model'.Wygeneruj szkielet właściwości
TopSpeedw ten sam sposób.AutomobileW klasie typy nowych właściwości są poprawnie wnioskowane z kontekstu.
Generowanie szkieletu dla nowego konstruktora
Teraz utworzymy metodę testową, która wygeneruje szkielet konstruktora do zainicjowania właściwości Model 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".
W pliku klasy
Automobilezauważ, że nowy konstruktor zbadał nazwy zmiennych lokalnych używanych w wywołaniu konstruktora, znalazł właściwości o tych samych nazwach w klasieAutomobile, i umieścił kod w treści konstruktora do przechowywania wartości argumentów we właściwościachModeliTopSpeed.Po wygenerowaniu nowego konstruktora pojawi się faliste podkreślenie pod wywołaniem domyślnego konstruktora w
DefaultAutomobileIsInitializedCorrectly. Komunikat o błędzie informuje, żeAutomobileklasa nie ma konstruktora, który przyjmuje zero argumentów. Aby wygenerować jawny konstruktor domyślny, który nie ma parametrów, kliknij żarówkę błędów Szybkie akcje, a następnie kliknij Generuj konstruktor w 'Automobile'.
Generowanie wycinku dla metody
Załóżmy, że specyfikacja wskazuje, że nowy Automobile może zostać umieszczony w stanie IsRunning, jeśli jego właściwości Model i TopSpeed są ustawione na coś innego niż wartości domyślne.
Dodaj następujące wiersze do
AutomobileWithModelNameCanStartmetody .Kliknij żarówkę błędów Akcji szybkiej dla
myAuto.Startwywołania metody, a następnie kliknij Generuj metodę 'Automobile.Start'.Kliknij żarówkę Szybkie akcje dla
IsRunningwłaściwości, a następnie kliknij Generuj właściwość 'Automobile.IsRunning'.Klasa
Automobilezawiera 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
DefaultAutomobileIsInitializedCorrectlykończy się niepowodzeniem, ponieważ warunekAssert.IsTruezwracaFalse. TestAutomobileWithModelNameCanStartkończy się niepowodzeniem, ponieważStartmetoda wAutomobileklasie 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 właściwości
Model,TopSpeediIsRunningzostały zainicjowane do poprawnych wartości domyślnych"Not specified",-1iFalse(lubfalsedla języka C#).Po wywołaniu metody
Start, należy ustawić flagęIsRunningna true tylko wtedy, gdy właściwościModellubTopSpeedsą ustawione na wartość inną niż domyślna. Usuń elementNotImplementedExceptionz 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.