Sdílet prostřednictvím


Rychlý začátek: Vývoj řízený testováním s použitím Průzkumníka testů

Chcete-li dopomoci správné funkci kódu napříč mnoha inkrementálními kroky vývoje, doporučujeme vytvořit jednotkové testy.Pro psaní jednotkových testů lze použít několik rozhraní, včetně některých vyvinutých třetími stranami.Některá testovací rozhraní jsou zaměřena na testování v jiných jazycích či platformách.Průzkumník testů poskytuje jednoduché uživatelské rozhraní jednotkových testů pro všechna tato rozhraní.Pro nejčastěji používaná rozhraní jsou k dispozici adaptéry, přičemž pro jiná rozhraní lze napsat vlastní adaptér.

Průzkumník testů nahrazuje okna jednotkových testů ze starších vydání sady Visual Studio.Mezi jeho výhody patří:

  • Spouštění testů .NET, nespravovaných, databázových a jiných za použití jednotného uživatelského rozhraní.

  • Použití testovacího rozhraní dle vlastního výběru, například rozhraní NUnit nebo MSTest.

  • Zobrazení všech běžně potřebných informací v jediném okně.Další podrobnosti lze nalézt v okně Vlastnosti.

Použití Průzkumníku testů

Spouštění jednotkových testů pomocí Průzkumníku testů

  1. Vytvořte jednotkový test používající vybrané testovací rozhraní.

    Chcete-li například vytvořit test používající rozhraní MSTest, proveďte následující kroky:

    1. Vytvořte projekt testu.

      V dialogovém okně Nový projekt rozbalte položku Visual Basic, Visual C# nebo Visual C++ a zvolte Test.

      Zvolte Projekt jednotkového testu.

    2. Zapište každý jednotkový test jako metodu.Přidejte před každou metodu testu atribut [TestMethod].

  2. V řádku nabídek zvolte nabídku Test a možnosti Spustit jednotkový test a Všechny testy.

    Řešení je sestaveno a testy spuštěny.

    Průzkumník testů otevře a zobrazí souhrn výsledků.

Zobrazení úplného seznamu testů: zvolte Zobrazit vše v libovolné kategorii.

Chcete-li se vrátit na souhrn, zvolte zobrazení Domů.

Zobrazení podrobností výsledku testu: zvolte test v Průzkumníku testů.Podrobnosti, například zprávy výjimek, se zobrazují v podokně podrobností.Více podrobností lze také vidět v okně Vlastnosti.

Přechod na kód testu: dvakrát klikněte na test v Průzkumníku testu nebo zvolte možnost Otevřít test v místní nabídce.

Ladění testu: otevřete místní nabídku jednoho nebo více testů a zvolte možnost Ladit vybrané testy.

Důležitá poznámkaDůležité

Zobrazené výsledky představují poslední spuštění.Obarvený panel výsledků zobrazuje pouze ty výsledky testů, které byly spuštěny.Spustíte-li například několik testů a některé z nich se nezdaří a poté spustíte pouze úspěšné testy, panel výsledků bude celý zelený.

[!POZNÁMKA]

Není-li zobrazen žádný test, ujistěte se, že máte nainstalován adaptér pro připojení Průzkumníku testů k použitému testovacímu rozhraní.Další informace naleznete v tématu Použití různých testovacích rozhraní s Průzkumníkem testů.

Návod: Použití jednotkových testů pro vývoj metody

Tento návod ukazuje způsob, jak vyvinout testovanou metodu v jazyce C# pomocí rozhraní Microsoft Unit Test.Postup lze snadno upravit pro ostatní jazyky a pro použití jiných testovacích rozhraní, například rozhraní NUnit.Další informace naleznete v tématu Použití různých testovacích rozhraní.

Vytvoření testu a metody

  1. Vytvořte projekt třídy knihovny jazyka Visual C#.Tento projekt bude obsahovat kód, který chceme dodat.V tomto příkladu je pojmenován MyMath.

  2. Vytvořte projekt testu.

    • V dialogu Nový projekt zvolte Visual C#, Test a Projekt jednotkového testu.

      Nový kód a testovací projekty

  3. Napište základní testovací metodu.Ověřte výsledek pro určitý vstup:

      [TestMethod]
      public void BasicRooterTest()
      {
        // Create an instance to test:
        Rooter rooter = new Rooter();
        // Define a test input and output value:
        double expectedResult = 2.0;
        double input = expectedResult * expectedResult;
        // Run the method under test:
        double actualResult = rooter.SquareRoot(input);
        // Verify the result:
        Assert.AreEqual(expectedResult, actualResult,
            delta: expectedResult / 100);
      }
    
  4. Vygenerujte z testu metodu.

    1. Umístěte kurzor na slovo Rooter a poté v místní nabídce zvolte možnosti Generovat a Nový typ.

    2. V dialogovém okně Generovat nový typ nastavte pole Projekt na projekt třídy knihovny.V tomto příkladu je tímto projektem MyMath.

    3. Umístěte kurzor na slovo SquareRoot a poté v místní nabídce zvolte možnosti Generovat a Prázdná metoda.

  5. Spusťte jednotkový test.

    • V nabídce Test zvolte možnosti Spustit jednotkové testy a Všechny testy.

      Řešení je sestaveno a spuštěno.

      Otevře se Průzkumník testů a zobrazí výsledky.

      Test je zobrazen mezi Testy s chybami.

  6. Vyberte název testu.

    Podrobnosti testu jsou zobrazeny v dolní části Průzkumníku testů.

  7. Chcete-li vidět, kde v testu došlo k chybě, zvolte položky v oblasti Trasování zásobníku.

Test jednotky Test Explorer zobrazení se nezdařilo.

V tomto okamžiku je vytvořen test a prázdná metoda, která bude upravena tak, aby byl test úspěšný.

Po každé změně je zapotřebí, aby byly všechny testy úspěšné.

  1. Vylepšete kód metody SquareRoot v souboru MyMath\Rooter.cs:

     public double SquareRoot(double input)
      {
        return input / 2;
      }
    
  2. V Průzkumníku testů zvolte položku Spustit všechny.

    Dojde k sestavení kódu a spuštění testu.

    Test je úspěšný.

    Explorer Test jednotky zobrazující absolvování testu.

Rozšiřte rozsah vstupů přidáním dalších testů.

  1. Chcete-li si být jistější, že kód funguje ve všech případech, přidejte testy, které zkoušejí širší rozsah vstupních hodnot.

    Tip

    Neupravujte existující testy, které byly úspěšné.Namísto toho přidejte nové testy.Existující testy měňte pouze v případě, že se změní požadavky uživatele.Tato zásada umožňuje zajistit, že během rozšiřování kódu nedojde ke ztrátě existující funkčnosti.

    Přidejte do testovací třídy následující test, který zkouší rozsah vstupních hodnot:

      [TestMethod]
      public void RooterValueRange()
      {
        // Create an instance to test:
        Rooter rooter = new Rooter();
        // Try a range of values:
        for (double expectedResult = 1e-8;
            expectedResult < 1e+8;
            expectedResult = expectedResult * 3.2)
        {
          RooterOneValue(rooter, expectedResult);
        }
      }
    
      private void RooterOneValue(Rooter rooter, double expectedResult)
      {
        double input = expectedResult * expectedResult;
        double actualResult = rooter.SquareRoot(input);
        Assert.AreEqual(expectedResult, actualResult,
            delta: expectedResult / 1000);
      }
    
  2. V Průzkumníku testů zvolte položku Spustit všechny.

    Nový test se nezdaří, přestože je první test stále úspěšný.

    Chcete-li najít bod, kde došlo k chybě, zvolte test obsahující chybu a poté zvolte položku nejvýše v Trasování zásobníku v dolní části Průzkumníku testů.

  3. Zkontrolujte testovanou metodu a zjistěte, co mohlo způsobit chybu.Přepište ve třídě MyMath.Rooter kód:

      public double SquareRoot(double input)
      {
        double result = input;
        double previousResult = -input;
        while (Math.Abs(previousResult - result) > result / 1000)
        {
          previousResult = result;
          result = result - (result * result - input) / (2 * result);
        }
        return result;
      }
    
  4. V Průzkumníku testů zvolte položku Spustit všechny.

    Oba testy jsou nyní úspěšné.

Přidejte testy výjimečných případů

  1. Přidejte test záporných vstupů:

           [TestMethod]
            public void RooterTestNegativeInputx()
            {
                Rooter rooter = new Rooter();
                try
                {
                    rooter.SquareRoot(-10);
                }
                catch (ArgumentOutOfRangeException e)
                {
                    return;
                }
                Assert.Fail();
            }
    
  2. V Průzkumníku testů zvolte položku Spustit všechny.

    Testovaná metoda uvízne ve smyčce a musí být ukončena ručně.

  3. Klikněte na tlačítko Zrušit.

    Po 10 sekundách je test ukončen.

  4. Opravte kód metody:

      public double SquareRoot(double input)
      {
        if (input <= 0.0) 
        {
          throw new ArgumentOutOfRangeException();
        } 
      ...
    
  5. V Průzkumníku testů zvolte položku Spustit všechny.

    Všechny testy jsou úspěšné.

Refaktorujte beze změn testů

  1. Zjednodušte kód, ale neměňte testy.

    Tip

    Proces refaktorizace je změna provedená za účelem zvýšení výkonu kódu nebo usnadnění jeho pochopení.Při refaktorizaci není zamýšleno změnit chování kódu, proto testy zůstávají nezměněny.

    Doporučujeme provádět kroky refaktorizace odděleně od kroků rozšiřujících funkčnost.Udržování testů v nezměněné podobě zajišťuje, že během refaktorizace nebyly do kódu omylem zavedeny chyby.

      public class Rooter
      {
        public double SquareRoot(double input)
        {
          if (input <= 0.0) 
          {
            throw new ArgumentOutOfRangeException();
          }
          double result = input;
          double previousResult = -input;
          while (Math.Abs(previousResult - result) > result / 1000)
          {
            previousResult = result;
            result = (result + input / result) / 2;
            //was: result = result - (result * result - input) / (2*result);
          }
          return result;
        }
      }
    
  2. Zvolte možnost Spustit všechny.

    Všechny testy jsou stále úspěšné.

    Zobrazení 3 testy předané Explorer Test jednotky.