Sdílet prostřednictvím


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

  1. V jazyce C# nebo Visual Basic vytvořte nový projekt knihovny tříd systému Windows. Pojmenujte ho GFUDemo_VB nebo GFUDemo_CSpodle toho, jaký jazyk používáte.

  2. 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.

  3. Vytvořte nový projekt testování jednotek (.NET Framework).

Přidání odkazu na projekt knihovny tříd

  1. 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.

  2. V dialogovém okně Správce odkazů vyberte Projekty a pak vyberte projekt knihovny tříd.

  3. Kliknutím na tlačítko OK zavřete dialogové okno Správce odkazů.

  4. Uložte řešení. Teď jste připraveni začít psát testy.

Generování nové třídy z testu jednotek

  1. 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.

  2. Vyhledejte deklaraci třídy UnitTest1 a přejmenujte ji na AutomobileTest.

    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.

  3. Vyhledejte metodu TestMethod1() a přejmenujte ji na DefaultAutomobileIsInitializedCorrectly(). Uvnitř této metody vytvořte novou instanci třídy s názvem Automobile, 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ší.

    Rychlé akce v jazyce Visual Basic

    Rychlé akce v jazyce C#

  4. 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í.

  5. 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.

  6. 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.

    Dialogové okno Generovat nový typ

  7. Kliknutím na tlačítko OK zavřete dialogové okno a vytvořte nový soubor.

  8. 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.

  1. Do testovací metody přidejte následující řádek kódu DefaultAutomobileIsInitializedCorrectly .

    Assert.IsTrue((myAuto.Model == "Not specified") && (myAuto.TopSpeed == -1));
    
  2. Vzhledem k tomu, že kód odkazuje na Automobiledvě nedefinované vlastnosti , podtržení vlnovkou se zobrazí pod Model a TopSpeed. Najeďte myší Model a zvolte žárovku s chybou Rychlé akce a pak zvolte Generovat vlastnost Automobile.Model.

  3. 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.

  1. Do třídy přidejte následující další testovací metodu AutomobileTest .

    [TestMethod]
    public void AutomobileWithModelNameCanStart()
    {
        string model = "Contoso";
        int topSpeed = 199;
        Automobile myAuto = new Automobile(model, topSpeed);
    }
    
  2. 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 ve Automobile třídě, a zadaný kód v těle konstruktoru pro uložení hodnot argumentů do Model vlastností a TopSpeed vlastnosti.

  3. Po vygenerování nového konstruktoru se pod voláním výchozího konstruktoru v DefaultAutomobileIsInitializedCorrectly. Chybová zpráva uvádí, že Automobile 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.

  1. Do metody přidejte následující řádky AutomobileWithModelNameCanStart .

    myAuto.Start();
    Assert.IsTrue(myAuto.IsRunning == true);
    
  2. Klikněte na žárovku chyby Rychlé akce pro myAuto.Start volání metody a potom klikněte na Generovat metodu Automobile.Start.

  3. 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 pojmenovanou Start() a vlastnost s názvem IsRunning.

Spuštění testů

  1. 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že Assert.IsTrue podmínka vrátí False. Test AutomobileWithModelNameCanStart selže, protože Start metoda ve Automobile třídě vyvolá výjimku.

    Okno Výsledky testu je znázorněno na následujícím obrázku.

    Výsledky testů, které selhaly

  2. 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

  1. Do výchozího konstruktoru přidejte následující kód, aby ModelTopSpeedIsRunning byly všechny vlastnosti inicializovány do správných výchozích "Not specified"hodnot , -1a False (nebo false pro jazyk C#).

    public Automobile()
    {
        this.Model = "Not specified";
        this.TopSpeed = -1;
        this.IsRunning = true;
    }
    
  2. Start Když je volána metoda, měla by nastavit IsRunning příznak na true pouze v případě, že Model jsou TopSpeed vlastnosti nastaveny na něco jiného než jejich výchozí hodnota. Odeberte z NotImplementedException těla metody a přidejte následující kód.

    public void Start()
    {
        if (this.Model != "Not specified" || this.TopSpeed != -1)
            this.IsRunning = true;
        else
            this.IsRunning = false;
    }
    

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.

    Výsledky testů, které prošly