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 řízený testy je přístup k návrhu softwaru, ve kterém nejprve napíšete jednotkové testy na základě specifikací produktu a potom napíšete zdrojový kód, který je nutný, aby testy prošly. 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:

Pokyny v tomto článku ilustrují nejnovější verzi interaktivního vývojového prostředí (IDE) dostupného v sadě Visual Studio. Počítač může u některých prvků uživatelského rozhraní zobrazit různé názvy nebo umístění. Možná používáte jinou verzi 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íku ř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íku řešení klikněte v rámci projektu testování jednotek 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 jednotkového testu

  1. Testovací projekt obsahuje soubor s názvem UnitTest1. Poklikáním na tento soubor v Průzkumníku ř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ávrhů vám pomůže během 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 vlnovkové podtržení, které označuje chybu při kompilaci, a žárovka Rychlé akce se zobrazí na levém okraji nebo přímo pod vlnovkou, pokud na ni umístíte kurzor.

    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 Visual Studio dali pokyn přidat soubor 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íku řešení zkontrolujte v uzlu projektu GFUDemo_VB nebo GFUDemo_CS a ověřte, že je v něm nový soubor Automobile.vb nebo 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.

Vygenerovat zástupný kód 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 dvě nedefinované vlastnosti na Automobile, zobrazuje se vlnovkové podtržení 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ástup pro vlastnost TopSpeed.

    Automobile Ve třídě jsou typy nových vlastností správně odvozeny z kontextu.

Vytvoření kostry pro nový konstruktor

Teď vytvoříme testovací metodu, která vygeneruje zástupce konstruktoru pro inicializaci vlastností Model a TopSpeed. 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, nalezl vlastnosti se stejnými názvy ve třídě Automobile, a v těle konstruktoru zadal kód pro uložení hodnot argumentů do vlastností Model a TopSpeed.

  3. Po vygenerování nového konstruktoru se pod voláním výchozího konstruktoru v DefaultAutomobileIsInitializedCorrectly objeví vlnovité podtržení. 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'.

Vytvořit zástupce 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 kontrolku chyby Rychlé akce u myAuto.Start volání metody a potom klikněte na Vytvořit metodu 'Automobile.Start'.

  3. Klikněte na žárovku Rychlých akcí u IsRunning vlastnosti a potom klepněte na 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. Když je volána metoda Start, měla by nastavit příznak IsRunning na true pouze v případě, že vlastnosti Model nebo TopSpeed jsou nastaveny na něco jiného, než je jejich výchozí hodnota. Odstraňte NotImplementedException z 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