Share via


İzlenecek yol: Test Gezgini'nin kullanıldığı test temelli geliştirme

Artımlı kod değişiklikleriyle kodunuzun düzgün çalışmasını sağlamaya yardımcı olmak için birim testleri oluşturun. Üçüncü taraflar tarafından geliştirilenler de dahil olmak üzere birim testleri yazmak için kullanabileceğiniz çeşitli çerçeveler vardır. Bazı test çerçeveleri farklı dillerde veya platformlarda test için özel olarak tasarlanmıştır. Test Gezgini, bu çerçevelerden herhangi birinde birim testleri için tek bir arabirim sağlar. Test Gezgini hakkında daha fazla bilgi için bkz. Test Gezgini ile birim testleri çalıştırma ve Test Gezgini hakkında SSS.

Bu izlenecek yol, Microsoft Test Framework (MSTest) kullanarak C# dilinde test edilmiş bir yöntemin nasıl geliştir yapılacağını gösterir. NUnit gibi diğer diller veya diğer test çerçeveleri için kolayca uyarlayabilirsiniz. Daha fazla bilgi için bkz . Üçüncü taraf birim testi çerçevelerini yükleme.

Test oluşturma ve kod oluşturma

  1. .NET veya .NET Standard için bir C# Sınıf Kitaplığı projesi oluşturun. Bu proje, test etmek istediğimiz kodu içerir. Projeye MyMath adını verin.

  2. Aynı çözümde .NET için yeni bir MSTest test projesi ekleyin.

    Visual Studio 2019 sürüm 16.9'da, MSTest proje şablonu adı Birim Testi Projesi'dir.

    Test projesine MathTests adını verin.

    New code and test projects

    New code and test projects

  3. Belirli bir giriş için elde edilen sonucu doğrulayan basit bir test yöntemi yazın. Sınıfına UnitTest1 aşağıdaki kodu ekleyin:

    [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. Test kodundan bir tür oluşturun.

    1. İmleci üzerine Rootergetirin ve ampul menüsünden Oluştur türü 'Rooter'Yeni tür oluştur'u> seçin.

      Generate new type quick action

      Generate new type quick action

    2. Tür Oluştur iletişim kutusunda, Project'i sınıf kitaplığı projesi olan MyMath olarak ayarlayın ve tamam'ı seçin.

      Generate Type dialog box in Visual Studio 2019

      Generate Type dialog box in Visual Studio 2019

  5. Test kodundan bir yöntem oluşturun. İmleci üzerine SquareRootgetirin ve ampul menüsünden 'Rooter.SquareRoot' yöntemi oluştur'u seçin.

  6. Birim testini çalıştırın.

    1. Test Gezgini'ne gidin.

      Test menüsünden Test Gezgini'ni açmak için Test Gezgini'ni seçin.

      Test menüsünden Test Gezgini'ni açmak için Windows>Test Gezgini'ni seçin.

    2. Testi çalıştırmak için Test Gezgini'nde Tümünü Çalıştır düğmesini seçin.

    Çözüm derlenip test çalıştırılır ve başarısız olur.

  7. Testin adını seçin.

    Testin ayrıntıları Test Ayrıntı Özeti bölmesinde görünür.

    Test Detail Summary in Test Explorer

    Test Detail Summary in Test Explorer

  8. Testin başarısız olduğu konuma atlamak için Yığın İzleme'nin altındaki üst bağlantıyı seçin.

Bu noktada, testin geçmesi için değiştirebileceğiniz bir test ve saplama oluşturdunuz.

Kod değişikliğini doğrulama

  1. Class1.cs dosyasında kodunu geliştirinSquareRoot:

    public double SquareRoot(double input)
    {
        return input / 2;
    }
    
  2. Test Gezgini'nde Tümünü Çalıştır'ı seçin.

    Çözüm derlenip test çalıştırılır ve geçer.

    Test Explorer showing a passing test

    Test Explorer showing a passing test

Giriş aralığını genişletme

Kodun her durumda çalıştığına olan güvenimizi artırmak için, daha geniş bir giriş değerleri aralığı deneyen testler ekleyin.

İpucu

Geçen mevcut testleri değiştirmekten kaçının. Bunun yerine yeni testler ekleyin. Mevcut testleri yalnızca kullanıcı gereksinimleri değiştiğinde değiştirin. Bu ilke, kodu genişletmek için çalışırken mevcut işlevselliği kaybetmediğinizden emin olmanıza yardımcı olur.

  1. Test sınıfına, bir dizi giriş değeri deneyen aşağıdaki testi ekleyin:

    [TestMethod]
    public void RooterValueRange()
    {
        // Create an instance to test.
        Rooter rooter = new Rooter();
    
        // Try a range of values.
        for (double expected = 1e-8; expected < 1e+8; expected *= 3.2)
        {
            RooterOneValue(rooter, expected);
        }
    }
    
    private void RooterOneValue(Rooter rooter, double expectedResult)
    {
        double input = expectedResult * expectedResult;
        double actualResult = rooter.SquareRoot(input);
        Assert.AreEqual(expectedResult, actualResult, delta: expectedResult / 1000);
    }
    
  2. Test Gezgini'nde Tümünü Çalıştır'ı seçin.

    Yeni test başarısız olur (ilk test yine de geçer). Hata noktasını bulmak için başarısız olan testi seçin ve ardından Test Ayrıntı Özeti bölmesindeki ayrıntılara bakın.

  3. Neyin yanlış olabileceğini görmek için test altındaki yöntemi inceleyin. SquareRoot Kodu aşağıdaki gibi değiştirin:

    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. Test Gezgini'nde Tümünü Çalıştır'ı seçin.

    İki test de geçti.

Olağanüstü durumlar için test ekleme

  1. Negatif girişler için yeni bir test ekleyin:

    [TestMethod]
    public void RooterTestNegativeInput()
    {
        Rooter rooter = new Rooter();
        Assert.ThrowsException<ArgumentOutOfRangeException>(() => rooter.SquareRoot(-1));
    }
    
  2. Test Gezgini'nde Tümünü Çalıştır'ı seçin.

    Test döngüleri altındaki yöntemin el ile iptal edilmesi gerekir.

  3. Test Gezgini'nin araç çubuğunda İptal'i seçin.

    Test yürütmeyi durdurur.

  4. Yönteminin SquareRoot başına aşağıdaki if deyimi ekleyerek kodu düzeltin:

    public double SquareRoot(double input)
    {
        if (input <= 0.0)
        {
            throw new ArgumentOutOfRangeException();
        }
        ...
    
  5. Test Gezgini'nde Tümünü Çalıştır'ı seçin.

    Tüm testler geçer.

Test altındaki kodu yeniden düzenleme

Kodu yeniden düzenleme, ancak testleri değiştirme.

İpucu

Yeniden düzenleme , kodun daha iyi veya daha kolay anlaşılmasını sağlamayı amaçlayan bir değişikliktir. Kodun davranışını değiştirmek için tasarlanmamıştır ve bu nedenle testler değiştirilmez.

Yeniden düzenleme adımlarını işlevselliği genişleten adımlardan ayrı olarak gerçekleştirmenizi öneririz. Testleri değiştirmeden tutmak, yeniden düzenleme sırasında yanlışlıkla hata vermediğiniz konusunda size güven verir.

  1. yönteminde SquareRoot hesaplayan result satırı aşağıdaki gibi değiştirin:

    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. Tümünü Çalıştır'ı seçin ve tüm testlerin yine de geçtiğini doğrulayın.

    Test Explorer showing 3 passed tests

    Test Explorer showing 3 passed tests