Udostępnij za pośrednictwem


Szybki start: tworzenie aplikacji z uwzględnieniem testów za pomocą narzędzia Eksplorator testów

Zaleca się utworzenie testów jednostkowych, aby pomóc w utrzymaniu poprawnego działania kodu przez wiele kroków przyrostowych cyklu wytwarzania oprogramowania.Istnieje kilka frameworków, których możesz użyć do pisania testów jednostkowych, łącznie z niektórymi opracowanymi przez inne firmy.Niektóre frameworki testowe są wyspecjalizowane w testowaniu różnych języków lub platform.Eksplorator testów dostarcza pojedynczy interfejs do testów jednostkowych w dowolnym z tych frameworków.Dostępne są adaptery dla większości powszechnie stosowanych frameworków, możesz również napisać własne adaptery dla innych frameworków.

Eksplorator testów zastępuje okna testów jednostkowych ze starszych wersji środowiska Visual Studio.Jego zalety obejmują:

  • Uruchamianie testów platformy .NET, niezarządzanych, baz danych oraz innych rodzajów testów przy użyciu pojedynczego interfejsu.

  • Używanie wybranego frameworku testów jednostkowych, takiego jak NUnit lub frameworków MSTest.

  • Oglądanie wszystkich potrzebnych zazwyczaj informacji w jednym oknie.Więcej szczegółów znajdziesz w oknie Właściwości.

Używanie Eksploratora testów

Aby uruchomić testy jednostkowe za pomocą Eksploratora testów

  1. Utwórz testy jednostkowe, które używają wybranego frameworku.

    Na przykład, aby utworzyć test, który używa frameworku MSTest:

    1. Utwórz projekt testowy.

      W oknie dialogowym Nowy projekt, rozwiń Visual Basic, Visual C# lub Visual C++, a następnie wybierz Test.

      Wybierz Projekt testów jednostkowych.

    2. Napisz każdy test jednostkowy jako metodę.Przed każdą metodą testową umieść atrybut [TestMethod].

  2. Na pasku menu, wybierz Test, Uruchom testy jednostkowe, Wszystkie testy.

    Rozwiązanie zostanie skompilowane, a testy uruchomione.

    Otwarty zostanie Eksplorator testów, który wyświetli podsumowanie wyników.

Aby zobaczyć pełną listę testów: Wybierz Pokaż wszystkie w dowolnej kategorii.

Aby powrócić do podsumowania, wybierz widok Strona główna.

Aby zobaczyć szczegółowe wyniki testu: Wybierz test w Eksploratorze testów.Szczegóły, takie jak komunikaty wyjątków, pojawią się w okienku szczegóły.Możesz również zobaczyć więcej szczegółów w oknie Właściwości.

Aby przejść do kodu testu: Kliknij dwukrotnie test w Eksploratorze testów lub wybierz Otwórz test w menu skrótów.

Aby debugować test: Otwórz menu skrótów jednego lub więcej testów, a następnie wybierz Debuguj wybrane testy.

Ważna uwagaWażne

Wyświetlane wyniki dotyczą ostatniego uruchomienia.Kolorowe paski wyników pokazują jedynie wyniki wykonanych testów.Na przykład, jeśli uruchomisz kilka testów i niektóre z nich nie powiodą się, a następnie uruchomisz jedynie testy, które powiodły się, to wszystkie paski wyników zostaną wyświetlone na zielono.

[!UWAGA]

Jeśli nie pojawi się żaden test, upewnij się, że zainstalowano adapter do połączenia Eksploratora testów z frameworkiem testowym, którego używasz.Aby uzyskać więcej informacji, zobacz Używanie różnych frameworków testowych w Eksploratorze testów.

Przewodnik: Używanie testów jednostkowych do opracowania metody

W tym przewodniku pokazano, w jaki sposób opracować przetestowaną metodę w języku C# za pomocą frameworku testów jednostkowych firmy Microsoft.Możesz ją łatwo przystosować do innych języków i używać innych frameworków testowych, takich jak NUnit.Aby uzyskać więcej informacji, zobacz Używanie różnych frameworków testowych.

Utworzenie testu i metody

  1. Utwórz projekt biblioteki klas Visual C#.Projekt ten będzie zawierał kod, który chcemy dostarczyć.W tym przykładzie, jest on nazwany MyMath.

  2. Utwórz projekt testowy.

    • W oknie dialogowym Nowy projekt, wybierz Visual C#, Test, a następnie wybierz Projekt testów jednostkowych.

      Nowe projekty kod i badania

  3. Napisz podstawową metodę testową.Sprawdź wynik uzyskany dla określonych danych wejściowych:

      [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. Wygeneruj metodę z testu.

    1. Umieść kursor na Rooter, a następnie, w menu skrótów, wybierz Generuj, Nowy typ.

    2. W oknie dialogowym Wygeneruj nowy typ, ustaw Projekt do projektu biblioteki klas.W tym przykładzie, jest to MyMath.

    3. Umieść kursor na SquareRoot, a następnie, w menu skrótów, wybierz Generuj, Namiastka metody.

  5. Uruchom test jednostkowy.

    • W menu Test, wybierz Uruchom testy jednostkowe, Wszystkie testy.

      Rozwiązanie zostanie skompilowane i uruchomione.

      Otwarty zostanie Eksplorator testów, który wyświetli wyniki.

      Test pojawi się pod Testy zakończone niepowodzeniem.

  6. Wybierz nazwę testu.

    Szczegóły testu zostaną wyświetlone w dolnej części Eksploratora testów.

  7. Zaznacz elementy pod Ślad stosu, aby zobaczyć, w którym miejscu testy nie powiodły się.

Test Explorer Test jednostki wyświetlono nie powiodło się.

Do tej pory, utworzono test i namiastkę, którą zmodyfikujesz, aby test powiódł się.

Po każdej zmianie, wszystkie testy powinny kończyć się powodzeniem.

  1. W pliku MyMath\Rooter.cs, popraw kod metody SquareRoot:

     public double SquareRoot(double input)
      {
        return input / 2;
      }
    
  2. W Eksploratorze testów, wybierz Uruchom wszystkie.

    Kod zostanie skompilowany, a test uruchomiony.

    Test zakończył się powodzeniem.

    Jednostka Test Explorer wyświetlono test przekazywania.

Dodaj testy, aby rozszerzyć zakres danych wejściowych.

  1. Aby zwiększyć pewność, że kod działa we wszystkich przypadkach, dodaj testy, które sprawdzają szerszy zakres wartości wejściowych.

    PoradaPorada

    Unikaj zmieniania istniejących testów, które powiodły się.Zamiast tego, dodaj nowe testy.Zmieniaj istniejące testy, tylko gdy zmienią się wymagania użytkownika.Zasada ta pomaga upewnić się, że nie tracisz istniejących funkcji w trakcie pracy nad rozszerzeniem kodu.

    W klasie testowej, dodaj następujący test, który sprawdzi zakres wartości wejściowych:

      [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. W Eksploratorze testów, wybierz Uruchom wszystkie.

    Nowy test kończy się niepowodzeniem, mimo że kod nadal przechodzi pierwszy test.

    Aby znaleźć punkt awarii, wybierz test, który zakończył się niepowodzeniem i w dolnej części Eksploratora testów, wybierz górny element Śladu stosu.

  3. Sprawdź testowaną metodę, aby zobaczyć, co może być źle.W klasie MyMath.Rooter, napisz kod ponownie:

      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. W Eksploratorze testów, wybierz Uruchom wszystkie.

    Teraz kod przechodzi oba testy.

Dodaj testy wyjątkowych przypadków

  1. Dodaj test ujemnych danych wejściowych:

           [TestMethod]
            public void RooterTestNegativeInputx()
            {
                Rooter rooter = new Rooter();
                try
                {
                    rooter.SquareRoot(-10);
                }
                catch (ArgumentOutOfRangeException e)
                {
                    return;
                }
                Assert.Fail();
            }
    
  2. W Eksploratorze testów, wybierz Uruchom wszystkie.

    Testowana metoda zapętla się i musi zostać anulowana ręcznie.

  3. Wybierz Anuluj.

    Test zatrzyma się po 10 sekundach.

  4. Napraw kod metody:

      public double SquareRoot(double input)
      {
        if (input <= 0.0) 
        {
          throw new ArgumentOutOfRangeException();
        } 
      ...
    
  5. W Eksploratorze testów, wybierz Uruchom wszystkie.

    Kod przechodzi wszystkie testy.

Refaktoryzuj bez zmieniania testów

  1. Upraszczaj kod, ale nie zmieniaj testów.

    PoradaPorada

    Refaktoryzacja jest zmianą, której celem jest usprawnienia działania kodu lub uczynienie go łatwiejszym w zrozumieniu.Nie jest przeznaczona do zmiany zachowania kodu i z tego powodu testy nie są zmieniane.

    Zaleca się, aby wykonać kroki refaktoryzacji oddzielnie od kroków, które rozszerzają funkcjonalność.Utrzymanie testów w niezmienionej postaci daje pewność, że podczas refaktoryzacji nie zostały przypadkowo wprowadzone usterki.

      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. Wybierz opcję Uruchom wszystko.

    Kod nadal przechodzi wszystkie testy.

    Wyświetlono 3 testów Explorer badania jednostki.