Aracılığıyla paylaş


Microsoft Fakes ile Test Edilen Kodu Yalıtma

Test ettiğiniz uygulama ile diğer bölümlerini değiştirerek kod yalıtmak Microsoft Fakes Yardım yer tutucular veya dolgu verileri. Bunlar, testlerinizi denetimi altında olan küçük kod parçalarıdır. Kodunuzu test etmek için yalıtarak sınaması başarısız olursa, neden orada ve değil başka bir yere olduğunu biliyoruz. Yer tutucular ve dolgu verileri Ayrıca, uygulamanızın diğer bölümlerinin henüz çalışmıyor olsa da, kodunuzu test sağlar.

Fakes iki özellikleri gelir:

  • A saplama bir sınıf aynı arabirimini uygulayan bir küçük tipiyle değiştirir. Yer tutucular kullanmak için uygulamanızın yalnızca arabirimleri ve diğer bileşenleri değil, her bileşen bağlıdır böylece tasarım sahip. ("Bileşeni tarafından" biz bir sınıf veya grubunun tasarlanmış ve birlikte güncelleştirildi ve genellikle bir derlemede bulunan sınıflar anlama.)

  • A Dolgu , uygulamanızın çalışma zamanında derlenen kod belirtilen yöntem çağrısı yapmak yerine, test sağlayan dolgu kod çalışır şekilde değiştirir. Dolgu verileri değiştiremez, bu tür .NET derlemelerini derlemeler çağrıları değiştirmek için kullanılabilir.

Fakes diğer bileşenleri Değiştir

Gereksinimler

  • Visual Studio Ultimate

Saplama ve dolgu türü arasında seçme

Genellikle, bir Visual Studio projesi geliştirmek ve bu sınıfların aynı anda güncelleştirmek için bir bileşen olarak düşünün. Yer tutucular ve dolgu verileri projesine başvuran diğer derlemelere veya çözümünüzdeki diğer projeler için proje yaptığı çağrılar için kullanmayı düşündüğünüz.

Visual Studio Çözüm ve dolgu verileri aramak için diğer Başvurulan derlemeler kodundaki tüm aramalar için yer tutucular genel bir kılavuz olarak kullanın. Bu, çünkü kendi içinde çözüm bileşenleri arabirimleri stubbing gerektirdiği şekilde tanımlayarak nı mantığından ayrıştırmak için iyi bir uygulamadır. Ancak dolgu verileri yerine kullanmak için dış derlemeler System.dll gibi ayrı arabirim tanımlarıyla genellikle sağlanmaz.

Diğer konular şunlardır:

Performans. Dolgu verileri daha yavaş çalışır, çünkü bunlar çalışma zamanında kodunuzu yeniden yazmak. Yer tutucular bu performansa sahip olmayan ve sanal yöntemleri gidebilirsiniz kadar hızlı.

Statik yöntemler, türleri kapalı. Yalnızca yer tutucular arabirimlerini kullanabilirsiniz. Bu nedenle, saplama türleri kullanılamaz statik yöntemler, sanal olmayan yöntemler, mühürlenmiş sanal yöntemleri, mühürlenmiş türleri vb. yöntemler.

İç türleri. Yer tutucular hem de Dolgu verisi kullanılabilir derleme özniteliği kullanılarak erişilebilir duruma iç türleri ile InternalsVisibleToAttribute.

Private yöntemleri. Yöntem imzası tüm türleri, özel yöntem çağrıları dolgu verileri değiştirebilirsiniz. Yer tutucular yalnızca görünür yöntemleri değiştirebilirsiniz.

Arabirimler ve soyut yöntemler. Yer tutucular arabirimleri ve sınamada kullanılan Soyut yöntemler uygulamaları sağlar. Yöntem gövdeleri sahip olmadığınız için dolgu verileri arabirimleri ve soyut yöntemler, işaretleme olamaz.

Genel olarak, kendi içinde codebase bağımlılıklarla bağlantısını ayırmak için saplama türleri kullanmanızı öneririz. Bileşenlerin arayüzleri arkasında gizleyerek bunu yapabilirsiniz. Dolgu türü sınanabilir API sağlamayan üçüncü taraf bileşenlerini ayırmak için kullanılır.

Yer tutucular ile çalışmaya başlama

  1. Arabirim ekleme

    Yer tutucular kullanmak için bunu açıkça başka bir bileşen sınıfları uygulamanızın belirttiğinizden olmayan bir şekilde test etmek istediğiniz kodu yazmak zorunda değilsiniz. "Bileşen" tarafından bir sınıf veya sınıfların geliştirilen ve birlikte güncelleştirildi ve genellikle bir Visual Studio projede yer ederler. Değişkenleri ve parametreleri arabirimlerini kullanarak bildirilmelidir ve diğer bileşenler örneklerini geçirilen veya bir fabrika kullanılarak oluşturulmuş. Olarak StockFeed bir uygulamanın başka bir bileşen sınıfta ise, örneğin, daha sonra bu kötü ele alınır:

    return (new StockFeed()).GetSharePrice("COOO"); // Bad

    Bunun yerine, diğer bir bileşen tarafından uygulanabilir ve hangi da test amaçları için bir saplama tarafından uygulanabilir bir arayüz tanımlayın:

    public int GetContosoPrice(IStockFeed feed)
    { return feed.GetSharePrice("COOO"); }
    
    Public Function GetContosoPrice(feed As IStockFeed) As Integer
     Return feed.GetSharePrice("COOO")
    End Function
    
  2. Fakes derlemesi Ekle

    1. Çözüm Gezgini'nde, test projesinin başvuru listesini genişletin. Visual Basic'te çalışırken, seçmelisiniz Tüm dosyaları göster referans listesini görmek için.

    2. (Örneğin IStockFeed) arabirimi tanımlandığı derleme başvurusu seçin. Bu başvuru kısayol menüsünde seçin Fakes derleme Ekle.

    3. Çözümü yeniden oluşturun.

  3. Testlerinizi, saplama örneklerini oluşturun ve kendi yöntemleri için kod sağlar:

    [TestClass]
    class TestStockAnalyzer
    {
        [TestMethod]
        public void TestContosoStockPrice()
        {
          // Arrange:
    
            // Create the fake stockFeed:
            IStockFeed stockFeed = 
                 new StockAnalysis.Fakes.StubIStockFeed() // Generated by Fakes.
                     {
                         // Define each method:
                         // Name is original name + parameter types:
                         GetSharePriceString = (company) => { return 1234; }
                     };
    
            // In the completed application, stockFeed would be a real one:
            var componentUnderTest = new StockAnalyzer(stockFeed);
    
          // Act:
            int actualValue = componentUnderTest.GetContosoPrice();
    
          // Assert:
            Assert.AreEqual(1234, actualValue);
        }
        ...
    }
    
    <TestClass()> _
    Class TestStockAnalyzer
    
        <TestMethod()> _
        Public Sub TestContosoStockPrice()
            ' Arrange:
            ' Create the fake stockFeed:
            Dim stockFeed As New StockAnalysis.Fakes.StubIStockFeed
            With stockFeed
                .GetSharePriceString = Function(company)
                                           Return 1234
                                       End Function
            End With
            ' In the completed application, stockFeed would be a real one:
            Dim componentUnderTest As New StockAnalyzer(stockFeed)
            ' Act:
            Dim actualValue As Integer = componentUnderTest.GetContosoPrice
            ' Assert:
            Assert.AreEqual(1234, actualValue)
        End Sub
    End Class
    

    Özel Sihirli burada sınıf parçasıdır StubIStockFeed. Microsoft Fakes mekanizması başvurulan derlemedeki her arabirim için bir saplama sınıf oluşturur. Saplama sınıf adı ile türetilen arabirimin adı olan "Fakes.Stub" olarak bir önek ve parametre türü adları eklenmiş.

    Yer tutucular da alıcılar ve ayarlayıcılar özellikleri, olayları ve genel yöntemler için oluşturulur. Daha fazla bilgi için bkz. Birim testi için uygulamanızın parçalarını birbirinden yalıtmak üzere saplamalar kullanma.

Dolgu verileri ile çalışmaya başlama

Bileşeniniz için çağrılar içerdiğini varsayalım DateTime.Now:

// Code under test:
    public int GetTheCurrentYear()
    {
       return DateTime.Now.Year;
    }

Sınama sırasında dolgu istiyorsunuz Now özelliği, çünkü gerçek sürüm inconveniently her çağrı sırasında farklı bir değer döndürür.

Dolgu verileri kullanmak için uygulama kodlarını değiştirmek veya belirli bir şekilde yazmanız gerekmez.

  1. Fakes derlemesi Ekle

    Çözüm Gezgini'nde, birim test projenizin başvurular açın ve sahte istediğiniz yöntemi içeren bütünleştirilmiş koduna başvuru seçin. Bu örnekte, DateTime sınıftır System.dll. Visual Basic projesinde başvurular görmek için Tüm dosyaları göster.

    Seçim Fakes derleme eklemek.

  2. Bir ShimsContext bir dolgu ekleme

    [TestClass]
    public class TestClass1
    { 
            [TestMethod]
            public void TestCurrentYear()
            {
                int fixedYear = 2000;
    
                // Shims can be used only in a ShimsContext:
                using (ShimsContext.Create())
                {
                  // Arrange:
                    // Shim DateTime.Now to return a fixed date:
                    System.Fakes.ShimDateTime.NowGet = 
                    () =>
                    { return new DateTime(fixedYear, 1, 1); };
    
                    // Instantiate the component under test:
                    var componentUnderTest = new MyComponent();
    
                  // Act:
                    int year = componentUnderTest.GetTheCurrentYear();
    
                  // Assert: 
                    // This will always be true if the component is working:
                    Assert.AreEqual(fixedYear, year);
                }
            }
    }
    
    <TestClass()> _
    Public Class TestClass1
        <TestMethod()> _
        Public Sub TestCurrentYear()
            Using s = Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create()
                Dim fixedYear As Integer = 2000
                ' Arrange:
                ' Detour DateTime.Now to return a fixed date:
                System.Fakes.ShimDateTime.NowGet = _
                    Function() As DateTime
                        Return New DateTime(fixedYear, 1, 1)
                    End Function
    
                ' Instantiate the component under test:
                Dim componentUnderTest = New MyComponent()
                ' Act:
                Dim year As Integer = componentUnderTest.GetTheCurrentYear
                ' Assert: 
                ' This will always be true if the component is working:
                Assert.AreEqual(fixedYear, year)
            End Using
        End Sub
    End Class
    

    Dolgu sınıf adları yapılmış ekleyerek Fakes.Shim için özgün adını yazın. Yöntem adı parametre adlarının sonuna eklenir.

Önceki örnekte, bir dolgu için statik bir yöntem kullanır. Dolgu için bir örnek yöntemi kullanmak için yazma AllInstances arasında adını yazın ve yöntem adı:

System.IO.Fakes.ShimFile.AllInstances.ReadToEnd = ...

Belirli örnekleri, kurucular ve Özellikler dolgu verileri de oluşturabilirsiniz. Daha fazla bilgi için bkz. Birim testi için uygulamanızı diğer derlemelerden yalıtmak üzere dolgular kullanma.

Bu bölümde

Birim testi için uygulamanızın parçalarını birbirinden yalıtmak üzere saplamalar kullanma

Birim testi için uygulamanızı diğer derlemelerden yalıtmak üzere dolgular kullanma

Kod oluşturma, derleme ve Microsoft Fakes adlandırma kuralları