Návod: Testování prvního vývoje pomocí funkce Generování z použití
Toto téma ukazuje, jak používat funkci Generovat z použití , která podporuje vývoj prvního testu.
Vývoj první zkoušky je přístup k návrhu softwaru, ve kterém nejprve napíšete testy jednotek na základě specifikací produktu a potom napíšete zdrojový kód, který je nutný k úspěšnému testování. Visual Studio podporuje vývoj pro první testování generováním nových typů a členů ve zdrojovém kódu při prvním odkazu na ně v testovacích případech před jejich definováním.
Visual Studio generuje nové typy a členy s minimálním přerušením pracovního postupu. Zástupné procedury můžete vytvářet pro typy, metody, vlastnosti, pole nebo konstruktory, aniž byste opustili aktuální umístění v kódu. Když otevřete dialogové okno pro zadání možností pro generování typů, fokus se po zavření dialogového okna okamžitě vrátí k aktuálnímu otevřenému souboru.
Funkci Generovat z použití lze použít s testovacími architekturami, které se integrují se sadou Visual Studio. V tomto tématu je demonstrováno rozhraní Microsoft Unit Testing Framework.
Poznámka:
V počítači se můžou zobrazovat různé názvy nebo umístění některých prvků uživatelského rozhraní sady Visual Studio v tomto článku. Možná používáte jinou edici sady Visual Studio nebo jiné nastavení prostředí. Další informace naleznete v tématu Přizpůsobení integrovaného vývojového prostředí (IDE).
Vytvoření projektu knihovny tříd Systému Windows a testovacího projektu
V jazyce C# nebo Visual Basic vytvořte nový projekt knihovny tříd systému Windows. Pojmenujte ho
GFUDemo_VB
neboGFUDemo_CS
podle toho, jaký jazyk používáte.V Průzkumník řešení klikněte pravým tlačítkem myši na ikonu řešení v horní části a zvolte Přidat>nový projekt.
Vytvořte nový projekt testování jednotek (.NET Framework).
Přidání odkazu na projekt knihovny tříd
V Průzkumník řešení pod projektem testování jednotek klikněte pravým tlačítkem myši na položku Odkazy a zvolte Přidat odkaz.
V dialogovém okně Správce odkazů vyberte Projekty a pak vyberte projekt knihovny tříd.
Kliknutím na tlačítko OK zavřete dialogové okno Správce odkazů.
Uložte řešení. Teď jste připraveni začít psát testy.
Generování nové třídy z testu jednotek
Testovací projekt obsahuje soubor s názvem UnitTest1. Poklikáním na tento soubor v Průzkumník řešení ho otevřete v editoru kódu. Vygenerovala se testovací třída a testovací metoda.
Vyhledejte deklaraci třídy
UnitTest1
a přejmenujte ji naAutomobileTest
.Poznámka:
IntelliSense teď nabízí dvě alternativy pro dokončování příkazů IntelliSense: režim dokončování a režim návrhu. Režim návrhu použijte v situacích, kdy se třídy a členy používají před jejich definováním. Když je otevřené okno IntelliSense, můžete stisknutím klávesy Ctrl+Alt+Mezerník přepínat mezi režimem dokončování a režimem návrhu. Další informace najdete v tématu Použití technologie IntelliSense . Režim návrhu vám pomůže při psaní
Automobile
v dalším kroku.Vyhledejte metodu
TestMethod1()
a přejmenujte ji naDefaultAutomobileIsInitializedCorrectly()
. Uvnitř této metody vytvořte novou instanci třídy s názvemAutomobile
, jak je znázorněno na následujících snímcích obrazovky. Zobrazí se podtržení vlnovek, které označuje chybu v době kompilace a žárovka Rychlé akce se zobrazí na levém okraji nebo přímo pod vlnovkou, pokud na ni najedete myší.Zvolte nebo klikněte na žárovku Rychlé akce . Zobrazí se chybová zpráva s informacemi, že typ
Automobile
není definován. Zobrazí se vám také některá řešení.Kliknutím na Tlačítko Generovat nový typ otevřete dialogové okno Generovat typ. Toto dialogové okno obsahuje možnosti, které zahrnují generování typu v jiném projektu.
V seznamu projektu klikněte na GFUDemo_VB nebo GFUDemo_CS, abyste sadě Visual Studio dali pokyn, aby soubor přidal do projektu knihovny tříd místo testovacího projektu. Pokud ještě není vybraný, zvolte Vytvořit nový soubor a pojmenujte ho Automobile.cs nebo Automobile.vb.
Kliknutím na tlačítko OK zavřete dialogové okno a vytvořte nový soubor.
V Průzkumník řešení se podívejte do uzlu projektu GFUDemo_VB nebo GFUDemo_CS a ověřte, že je v něm nový Automobile.vb nebo soubor Automobile.cs. V editoru kódu je fokus stále v
AutomobileTest.DefaultAutomobileIsInitializedCorrectly
, který umožňuje pokračovat v psaní testu s minimálním přerušením.
Vygenerování zástupných procedur vlastnosti
Předpokládejme, že specifikace produktu uvádí, že Automobile
třída má dvě veřejné vlastnosti pojmenované Model
a TopSpeed
. Tyto vlastnosti musí být inicializovány s výchozími hodnotami "Not specified"
a -1
výchozím konstruktorem. Následující test jednotek ověří, že výchozí konstruktor nastaví vlastnosti na správné výchozí hodnoty.
Do testovací metody přidejte následující řádek kódu
DefaultAutomobileIsInitializedCorrectly
.Vzhledem k tomu, že kód odkazuje na
Automobile
dvě nedefinované vlastnosti , podtržení vlnovkou se zobrazí podModel
aTopSpeed
. Najeďte myšíModel
a zvolte žárovku s chybou Rychlé akce a pak zvolte Generovat vlastnost Automobile.Model.Stejným způsobem vygenerujte zástupný proceduru
TopSpeed
vlastnosti pro vlastnost.Automobile
Ve třídě jsou typy nových vlastností správně odvozeny z kontextu.
Generování zástupných procedur pro nový konstruktor
Teď vytvoříme testovací metodu, která vygeneruje zástupný proceduru konstruktoru Model
pro inicializaci vlastností a TopSpeed
vlastností. Později přidáte další kód pro dokončení testu.
Do třídy přidejte následující další testovací metodu
AutomobileTest
.Klikněte na žárovku s chybou Rychlé akce pod červenou vlnovku a potom klepněte na tlačítko Generovat konstruktor v 'Automobile'.
Automobile
V souboru třídy si všimněte, že nový konstruktor prozkoumal názvy místních proměnných, které se používají ve volání konstruktoru, nalezeny vlastnosti, které mají stejné názvy veAutomobile
třídě, a zadaný kód v těle konstruktoru pro uložení hodnot argumentů doModel
vlastností aTopSpeed
vlastnosti.Po vygenerování nového konstruktoru se pod voláním výchozího konstruktoru v
DefaultAutomobileIsInitializedCorrectly
. Chybová zpráva uvádí, žeAutomobile
třída nemá žádný konstruktor, který přijímá nulové argumenty. Chcete-li vygenerovat explicitní výchozí konstruktor, který nemá parametry, klepněte na žárovku s chybou Rychlé akce a potom klepněte na tlačítko Generate constructor in 'Automobile'.
Generování zástupných procedur pro metodu
Předpokládejme, že specifikace uvádí, že nový Automobile
lze vložit do IsRunning
stavu, pokud jsou jeho Model
vlastnosti TopSpeed
nastaveny na něco jiného než výchozí hodnoty.
Do metody přidejte následující řádky
AutomobileWithModelNameCanStart
.Klikněte na žárovku chyby Rychlé akce pro
myAuto.Start
volání metody a potom klikněte na Generovat metodu Automobile.Start.Klikněte na žárovku Rychlých akcí pro
IsRunning
vlastnost a potom klepněte na tlačítko Generovat vlastnost Automobile.IsRunning.Třída
Automobile
nyní obsahuje metodu pojmenovanouStart()
a vlastnost s názvemIsRunning
.
Spuštění testů
V nabídce Test zvolte Spustit>všechny testy.
Příkaz Spustit>všechny testy spustí všechny testy v libovolných testovacích architekturách, které jsou napsané pro aktuální řešení. V tomto případě existují dva testy a oba selžou podle očekávání. Test
DefaultAutomobileIsInitializedCorrectly
selže, protožeAssert.IsTrue
podmínka vrátíFalse
. TestAutomobileWithModelNameCanStart
selže, protožeStart
metoda veAutomobile
třídě vyvolá výjimku.Okno Výsledky testu je znázorněno na následujícím obrázku.
V okně Výsledky testu poklikejte na každý řádek výsledků testu a přejděte na umístění každého testu.
Implementace zdrojového kódu
Do výchozího konstruktoru přidejte následující kód, aby
Model
TopSpeed
IsRunning
byly všechny vlastnosti inicializovány do správných výchozích"Not specified"
hodnot ,-1
aFalse
(nebofalse
pro jazyk C#).Start
Když je volána metoda, měla by nastavitIsRunning
příznak na true pouze v případě, žeModel
jsouTopSpeed
vlastnosti nastaveny na něco jiného než jejich výchozí hodnota. Odeberte zNotImplementedException
těla metody a přidejte následující kód.
Znovu spusťte testy.
V nabídce Test přejděte na příkaz Spustit a klepněte na tlačítko Všechny testy.
Tentokrát testy projdou. Okno Výsledky testu je znázorněno na následujícím obrázku.