Aracılığıyla paylaş


Birim Test temelleri

Bu konuda yazı ve birim test Visual Studio Test çalışmasının temel kavramları açıklar. Aşağıdaki bölümleri içerir:

Unit testing overview

  • Quick starts

The MyBank Solution example

Creating the unit test projects

Writing your tests

Running tests in Test Explorer

  • Running and viewing tests from the Test Explorer toolbar

  • Running tests after every build

  • Filtering and grouping the test list

Debugging unit tests

Additional tools for unit tests

  • Generating application code from tests

  • Generating multiple tests by using data driven test methods

  • Analyzing unit test code coverage

  • Isolating unit test methods with Microsoft Fakes

Birim test genel bakış

Visual Studio Test Explorer geliştiricileri ve birleştirmek ekipleri desteklemek için tasarlanmış Birim test kendi yazılım geliştirme yöntemleri de. Birim sınaması, uygulama kodu, bunu yapmak için beklediğiniz mu doğrulayarak programınızın doğruluğu sağlamak yardımcı olur. Sınama biriminde bağımsız test edebilirsiniz ayrı sınanabilir davranışları keşfetmeye programınızın işlevini çözümleme birimlerini. Kullandığınız bir birim sınama çerçevesi bu davranışları testler oluşturmak ve bu sınamaların sonuçları bildirin.

Yazılım geliştirme iş akışınız ayrılmaz bir parçası olduğunda birim sınaması büyük etkiye sahiptir. Bir işlev veya diğer uygulama kod bloðu yazmak hemen sonra standart, sınır ve giriş verilerinin hatalı durumda yanıt kodu davranışını doğrulayın ve kod tarafından yapılan herhangi bir açık veya örtülü varsayımlar doğrulamak birimi sınamalarını oluşturun. Bilinen yazılım geliştirme uygulamada sürümlü geliştirme test, birimi sınamaları tasarım belgeleme ve işlevsel belirtimler işlevsellik olarak kullanmak için kod yazmadan önce birimi sınamaları oluşturun.

Sınama Gezgini birimi sınamaları çalıştırmak ve sonuçları Visual Studio'da görüntülemek için esnek ve verimli bir yol sunar. Visual Studio, Microsoft birim frameworks yönetilen ve yerel kodu için sınama yükler. Sınama Explorer, üçüncü taraf ve açık kaynak Test Explorer Eklenti arabirimleri uygulayan birim test çerçeveleri de çalıştırabilirsiniz. Çoğu bu çerçeveleri Visual Studio Extension Manager ve Visual Studio Galerisi ile ekleyebilirsiniz. Bkz.Nasıl yapılır: üçüncü taraf birim Test Frameworks yükleyin

Sınama Gezgini görünümlerini tüm sınamalarınızı görüntüleyebilir veya yalnızca, başarısız oldu, geçmiş olan sınamaları henüz çalıştırmak yapmadıysanız veya atlanmış. Arama kutusuna genel düzeyde eşleşen metin veya önceden tanımlanmış filtreler birini seçerek sınamaların herhangi bir görünümde filtre uygulayabilirsiniz. Herhangi bir anda herhangi bir seçimi sınamalarını çalıştırabilirsiniz. Kullandığınızda, Visual Studio Ultimate, sonra her siparişe otomatik olarak sınamalarını çalıştırabilirsiniz. Bir sınama sonuçlarını pass/fail çubuğu explorer penceresinin en üstündeki hemen görülemeyebilir. Sınama yöntemi sonucu ayrıntılarını test seçtiğinizde görüntülenir.

Hh694602.collapse_all(tr-tr,VS.110).gifHızlı başlatmalar

Doğrudan kodlama içine alır birim sınaması giriş için bu konulardan birine bakın:

MyBank çözüm örneği

Bu konudaki kullanıyoruz adlı kurgusal bir uygulama geliştirme MyBank örnek olarak. Bu konudaki açıklamaları izleyin gerçek kod gerekmez. Sınama yöntemleri C# ile yazılmış ve yönetilen kod için Microsoft birim sınama Framework kullanılarak sunulur, ancak, kavramlar kolayca diğer diller frameworks aktarılır ve.

MyBank çözüm

Bizim ilk girişimi için bir tasarım en MyBank uygulama, ayrı bir hesap ve banka ile hareketlerini gösteren bir hesapları bileşen ve toplama ve tek tek hesapları yönetmek için işlevselliğini temsil eden bir veritabanı bileşeni içerir.

Biz oluşturmak bir MyBank iki projeyi içeren çözüm:

  • Accounts

  • BankDb

Bizim ilk girişimi tasarlama en Accounts proje içeren bir hesap paraçekerken ve varlıkları hesabından geri alınmasının gibi hesap, her türlü ortak işlevsellik belirten bir arabirim hakkındaki temel bilgileri tutmak üzere bir sınıf ve türetilmiş bir sınıf arabirimden bir Çek hesabı temsil eder. Aşağıdaki kaynak dosyaları oluşturarak hesapları projeler başlamadan:

  • AccountInfo.csbir hesap için temel bilgileri tanımlar.

  • IAccount.csbir standart tanımlar IAccounthavale ve varlıkları bir hesaptan Geri Al ve hesap bakiyesi almak için yöntemleri de dahil olmak üzere bir hesap için arabirim.

  • CheckingAccount.csiçeren CheckingAccount uygulayan sınıf IAccounts Çek hesabı arabirimi.

Çek hesabından mevzuatı yapmanız gerekir, bir şey withdrawn hesap bakiyesini daha az olduğuna emin olmaktır deneyimi biliyoruz. Biz geçersiz kılmak için IAccount.Withdaw yönteminde CheckingAccount bir yöntem bu koşul için denetler. Yöntem aşağıdaki gibi görünebilir:

public void Withdraw(double amount)
{
    if(m_balance >= amount)
    {
        m_balance -= amount;
    }
    else
    {
        throw new ArgumentException(amount, "Withdrawal exceeds balance!")
    }
}

Biz bazı kod olduğundan, test için zamanı geldi.

Birim test projeleri oluşturma

Birim test proje genellikle tek kod proje yapısını yansıtır. MyBank örnekte adlı iki birim test projeleri eklemek AccountsTests ve BankDbTests için MyBanks çözüm. Test proje adları rasgele ancak standart adlandırma kurallarına kullandığı iyi bir fikirdir.

Bir birimi projesinin bir çözüm eklemek için:

  1. Üzerinde dosyasını menüsünden seçin Yeni ve seçin Proje (klavye Ctrl + SHIFT + n).

  2. New Project iletişim kutusunda, genişletme yüklü düğüm, test projeniz için kullanın ve sonra istediğiniz dili seçin Test.

  3. Microsoft birim test frameworks birini kullanmayı tercih Birim Test proje project şablonları listesinden. Aksi halde, kullanmak istediğiniz sınama çerçevesi biriminin proje şablonu seçin. Test etmek için Accounts proje örneðimizi, proje adı AccountsTests.

    Uyarı

    Tüm üçüncü taraf ve açık kaynak birim test frameworks Visual Studio proje şablonu sağlar.Bir proje oluşturma hakkında daha fazla bilgi için framework belgeye başvurun.

  4. Birim test projenizde hesapları projesine örneğimizde test altında kod proje başvurusu ekleyin.

    Başvuru kodu proje oluşturmak için:

    1. Çözüm Gezgini içinde, uygulama projesini seçin.

    2. Üzerinde Proje menüsünden seçin Add Reference.

    3. Reference Manager iletişim kutusunu açmak çözüm düğümü seçin projeleri. Kod proje adını seçin ve iletişim kutusunu kapatın.

Her birim test proje kodu proje sınıflarda adlarını yansıtan sınıflarını içerir. Örneğimizde, AccountsTests proje aşağıdaki sınıfları içerecektir:

  • AccountInfoTestssınıf için birim test yöntemlerini içeren AccountInfo , sınıf BankAccount project

  • CheckingAccountTestssınıf için birim test yöntemlerini içeren CheckingAccount sınıfı.

Sınamalarınızı yazma

Birim test kullandığınız framework ve Visual Studio IntelliSense kod proje birimi sınamaları oluşturmada size yol gösterecektir. Explorer sınama çalıştırmak için birim sınama yöntemleri tanımlamak için belirli öznitelikleri ekleyin çoğu frameworks gerektirir. Çerçeveleri de sağlar — genellikle aracılığıyla ifadeleri ya da yöntem öznitelikleri onaylama — sınama yöntemi geçirilen veya başarısız belirtmek için. Diğer öznitelikler sınıf atandığında ve her sınama yöntemi ve sonra her bir test yöntemi ve sınıf yok edilmeden çalıştırılır devrelerde yöntemler önce isteğe bağlı kurulum yöntemlerini tanımlayın.

aaa (Yerleştir, Act, Assert) desen birim testleri test altında bir yöntem için yazma yaygın bir yöntemdir.

  • Yerleştir bölümünde bir birim sınama yönteminin nesneleri başlatır ve altında test yöntemine iletilen veri değerini ayarlar.

  • Act bölüm altında düzenlenmiş parametrelerle test yöntemini çağırır.

  • Assert bölüm doğrular altında test yönteminin eylem beklendiği gibi davranır.

Test etmek için CheckingAccount.Withdraw bizim örnek yöntemi, biz yazabilirler sınamalarının: biri yöntemi Standart davranışını denetler ve mevzuatı, Bakiye birden fazla başarısız olacağını doğrulayan biri. De CheckingAccountTests sınıfı, aşağıdaki yöntemlerden ekledik:

[TestMethod]
public void Withdraw_ValidAmount_ChangesBalance()
{
    // arrange
    double currentBalance = 10.0;
    double withdrawal = 1.0;
    double expected = 9.0;
    var account = new CheckingAccount("JohnDoe", currentBalance);
    // act
    account.Withdraw(withdrawal);
    double actual = account.Balance;
    // assert
    Assert.AreEqual(expected, actual);
}

[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void Withdraw_AmountMoreThanBalance_Throws()
{
    // arrange
    var account = new CheckingAccount("John Doe", 10.0);
    // act
    account.Withdraw(1.0);
    // assert is handled by the ExcpectedException
}

Dikkat edin Withdraw_ValidAmount_ChangesBalance açık bir kullanır Assert deyimini test yöntemine iletir veya hata verirse, sırada Withdraw_AmountMoreThanBalance_Throws kullanan ExpectedException test yöntemi başarısını belirlemek için öznitelik. Örtü altındaki birim test çerçevesine test yöntemleri try/catch deyimleri sarar. Çoğu durumda, bir özel durum yakalandı, test yöntem başarısız olur ve özel durum göz ardı edilir. ExpectedException Özniteliği sınama yöntemi, belirtilen özel durum oluşursa geçmesine neden olur.

Microsoft birim Frameworks sınama hakkında daha fazla bilgi için aşağıdaki konulardan birini bakın:

Sınama Explorer'da sınamalarını çalıştırma

Test proje oluştururken, testleri Test Gezgini'nde görünür. Sınama Explorer görünmüyorsa, seçim Test Visual Studio menüsünden seçin Windowsve sonra seçin Test Explorer.

Birim Test Gezgini

Çalıştırmak, yazma ve sınamalarınızı yeniden çalıştırın, Test Explorer'ın varsayılan görünümü sonuçları gruplar halinde görüntüler Sınamaları başarısız, Geçirilen testleri, Testleri Atlanan ve Değil sınamalar. Tüm sınamalar o gruptaki görüntüleyen görünümü açmak için grup başlığını seçebilirsiniz.

Hh694602.collapse_all(tr-tr,VS.110).gifÇalışan ve testi Test Explorer araç çubuğunu görüntüleme

Sınama Explorer araç bulmak, düzenlemek ve ilgilendiğiniz sınamalarını çalıştırın yardımcı olur.

Testler Test Explorer araç çubuğundan

Seçebileceğiniz Çalışan tüm tüm sınamaları çalıştırın veya seçmek için çalıştırmak sınamaları çalıştırmak için bir altkümesini seçmek için. Bir dizi testi çalıştırdıktan sınama çalışması özeti Test Explorer penceresinin alt kısmında görüntülenir. Alt bölmede o test ayrıntılarını görüntülemek için Sına'yı seçin. Seçim Açık Test bağlam menüsünden (klavye: F12) seçili sınama kaynak kodunu görüntülemek için.

Hh694602.collapse_all(tr-tr,VS.110).gifSonra her yapı sınamalarını çalıştırma

Uyarı

Her yapı yalnızca Visual Studio Ultimate içinde desteklenen sonra çalışan birim test eder.

Yapıdan sonra Çalıştır

Sonra yerel her yapı birimi sınamaları çalıştırmayı tercih Test standart menüsünden seçin Çalıştırma testleri sonra yapı Test Explorer araç çubuğunda.

Hh694602.collapse_all(tr-tr,VS.110).gifFiltre ve gruplama test listesi

Sınamaları, çok sayıda olduğunda tarafından belirtilen dize listesine filtre uygulamak için sınama Explorer arama kutusuna yazabilirsiniz. Filter olayı daha fazla filtre listesinden seçerek sınırlandırabilirsiniz.

Arama filtre kategorisi

Test Explorer grubu düğmesi

Sınamalarınızı kategoriye göre gruplandırmak için seçim Group By düğme.

Daha fazla bilgi için bkz. Birim testleri Test Explorer ile çalışan

Hata ayıklama birimi sınamaları

Sınamalarınızı için bir hata ayıklama oturumu başlatmak için sınama Gezgini'ni kullanabilirsiniz. Kodunuzu Visual Studio debugger ile sorunsuz olarak stepping, geriye ve ileriye birim testleri ve test altında proje arasında sürer. Hata ayıklama başlatmak için:

  1. Visual Studio Düzenleyicisi'nde, hata ayıklamak istediğiniz bir veya daha fazla test yöntemlerini bir kesme noktası ayarlayın.

    Not

    Sınama yöntemleri herhangi bir sırada çalıştığından, hata ayıklamak istediğiniz tüm sınama yöntemleri Kırılma noktaları ayarlayın.

  2. Gezgini'nde, Test, test yöntemleri seçin ve ardından seçin Hata ayıklama sınamaları seçili kısayol menüsünden.

Hata ayıklayıcı hakkında daha fazla bilgi için bkz: Visual Studio'da hata ayıklama.

Birim sınaması için ek araçlar

Hh694602.collapse_all(tr-tr,VS.110).gifTesti uygulama kodu oluşturma

Proje Kodu yazmadan önce sınamalarınızı yazıyorsanız, IntelliSense Sýnýflar ve yöntemler proje kodunuzu oluşturmak için kullanabilirsiniz. Sınıf çağıran bir test yöntemi veya oluşturmak istediğiniz yöntemi bir ifadesi yazın, sonra çağrı altında IntelliSense menüsünü açın. Çağrı yeni sınıfının yapıcı için ise Generate yeni tür menüsünden ve kod Projenizde sınıf eklemek için Sihirbazı izleyin. Çağrı bir yöntem ise Oluştur yeni bir yöntem IntelliSense menüsünden.

Yöntem saplama IntelliSense menü oluştur

Hh694602.collapse_all(tr-tr,VS.110).gifBirden fazla sınamaları veri sınama yöntemleri kullanan kullanarak oluşturma

Not

Yalnızca yönetilen kod için Microsoft birim test çerçevesine kullanarak yazma yöntemleri test etmek için aşağıdaki yordamları uygulayın.Farklı bir çerçeve kullanıyorsanız eşdeğer bir işlevselliği framework belgelerine bakın.

Veri güdümlü test yöntemleri tek birim sınama yöntemi değer aralığını doğrulayın olanak tanır. Verilere bağlı birim sınama yöntemi oluşturmak için yöntemi ile süslemek bir DataSource veri kaynağı ve, tablo belirtir özniteliği sınamak istediğiniz değişken değerlerini içerir. Yöntemin gövdesinde, satır değerlerini kullanarak deðiþkenlere TestContext.DataRow[ColumnName] Dizin Oluşturucu.

Örneğin, gereksiz bir yöntem eklediğimiz varsaymak CheckingAccount adlı bir sınıf AddIntegerHelper. AddIntegerHelperiki tamsayılar ekler.

Verilere dayanan bir sınama için oluşturmak için AddIntegerHelper yöntemi, biz önce oluşturmanız adında bir Access veritabanı AccountsTest.accdb ve adlı bir tablo AddIntegerHelperData. AddIntegerHelperData Ve buna ek olarak birinci ve ikinci işlenen belirtmek için sütun ve beklenen sonucu belirtmek için sütun tablo tanımlar. Biz satır sayısı uygun değerlerle doldurun.

    [DataSource(
        @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Projects\MyBank\TestData\AccountsTest.accdb", 
        "AddIntegerHelperData"
    )]
    [TestMethod()]
    public void AddIntegerHelper_DataDrivenValues_AllShouldPass()
    {
        var target = new CheckingAccount();
        int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
        int y = Convert.ToInt32(TestContext.DataRow["SecondNumber"]); 
        int expected = Convert.ToInt32(TestContext.DataRow["Sum"]);
        int actual = target.AddIntegerHelper(x, y);
        Assert.AreEqual(expected, actual);
    }

Attributed yöntemi tablodaki her satır için bir kez çalıştırılır. Yineleme biri başarısız olursa test Explorer yöntemi için bir sınama hatası bildiriyor. Test sonuçları Ayrıntı bölmesinde yöntemi her veri satırı pass/fail status yöntemi gösterir.

Daha fazla bilgi için bkz. Nasıl Yapılır: Veri Temelli Birim Testi Oluşturma

Hh694602.collapse_all(tr-tr,VS.110).gifBirim test kod kapsamı çözümleme

Not

Birim test kod kapsamı, doğal ve yönetilen diller ve birim Test Çerçevesi tarafından çalıştırılan tüm birim test çerçeveleri için kullanılabilir.

Aslında birimi sınamaları tarafından Visual Studio Kod Kapsamı aracını kullanarak sınanan ürün kodunuzu miktarını belirleyebilir. Kod kapsamı, seçilen sınamaların ya da bir çözüm içindeki tüm sınamalar çalıştırabilirsiniz. Kod Kapsamı Results penceresi satırı, işlev, sınıf, ad ve modülü tarafından kullandı ürün kod bloklarını yüzdesini görüntüler.

Kod Kapsamı test yöntemleri için bir çözüm çalıştırmak için

  1. Seçim testleri Visual Studio menüsünde ve sonra seçin Çözümle kod kapsamı.

  2. Bu komutlardan birini seçin:

    1. Seçilen sınamaların Test Gezgini'nde seçtiğiniz test yöntemlerini çalıştırır.

    2. Tüm sınamalar çözümü test yöntemlerini çalıştırır.

Karşılama sonuçları kod kapsamı Sonuçları penceresinde görüntülenir.

Kod kapsamı sonuçları

Daha fazla bilgi için bkz. Kod kapsamı belirlemek ne kadar kod kullanılarak test edilmiştir.

Hh694602.collapse_all(tr-tr,VS.110).gifBirim test yöntemleri ile Microsoft Fakes yalıtma

Not

Microsoft Fakes, yalnızca Visual Studio Ultimate içinde kullanılabilir.Microsoft Fakes, yönetilen kod için birim sınaması çerçeveleri kullanarak yazma test yöntemleri ile kullanılabilir.

Sorunu

Dış bağımlılıklar odaklanmayı bir işlev içinde iç kod doğrulama yöntemi sınama çağrılarıyla altında işlevleri, yazıp zor olabilir birim sınama yöntemleri sağlamaktadır. Örneğin, yöntemleri, CheckingAccount örnek sınıf büyük bir olasılıkla olun çağrıları BankDb ana veritabanını güncelleştirmek için Bileşen. Biz erişimcilerinden CheckingAccount bakmak için sınıf olduğu gibi aşağıdaki:

class CheckingAccount : IAccount
{
    public CheckingAccount(customerName, double startingBalance, IBankDb bankDb)
    {
        m_bankDb = bankDb;
        // set up account
    }

    public void Withdraw(double amount)
    {
        if(m_balance >= amount)
        {
            m_balance = m_MyBankDb.Withdraw(m_accountInfo.ID, amount);
        }
        else
        {
            throw new ArgumentException(amount, "Withdrawal exceeds balance!")
        }
    }

    private IBankDb m_bankDb = null;
    // ...

Bu birimi sınamalarını CheckingAccount.Withdraw yöntemi şimdi başarısız olabilir çağrısı nedeniyle oluşan sorunları nedeniyle m_bankDb.Withdraw. Veritabanı veya ağ bağlantısı kaybolmuş olabilir veya veritabanı izinleri yanlış olabilir. Bir hata m_bankDB.Withdraw çağrı test iç kalarak ilişkili olmayan nedenlerle başarısız olmasına neden.

Microsoft Fakes çözümü

Microsoft Fakes, sınıflar ve sınıflarda bağımlılıklara neden birim sınama yöntemleri için kullanabilirsiniz yöntemleri içeren derleme oluşturur. Oluşturulan Fakes modülü alternatif sınıfında bir yöntem ve her ortak hedef bileşen yöntemi için bir temsilci bildirir. Bir test yöntemi tam bağımlılık arama davranışını sınamak istediğiniz yöntemi oluşturmak için temsilci uygular.

Örneğimizde, biz Fakes derleme için oluşturabilirsiniz BankDb proje ve sonra StubIBankDb Fakes tarafından üretilen ve, türetilmiş sınıf IBankDb veritabanı ile etkileşim nedeniyle belirsizliği ortadan kaldırmak için arabirim. Değiştirilen sürümü Withdraw_ValidAmount_ChangesBalance test yöntemi ardından şuna benzeyebilir:

[TestMethod]
public void Withdraw_ValidAmount_ChangesBalance()
{
    // arrange
    double currentBalance = 10.0;
    double withdrawal = 1.0;
    double expected = 9.0;

    // set up the Fakes object and delegate
    var stubBankDb = new MyBank.Stubs.StubIBankDb();
    stubBankDb.WithdrawDoubleDouble = (id, amount) => { return 9.0; }
    var account = new CheckingAccount("JohnDoe", currentBalance, stubBankDb);

    // act
    account.Withdraw(withdrawal);
    double actual = account.Balance;

    // assert
    Assert.AreEqual(expected, actual);
}

Bu satırda bir test yöntemi:

stubBankDb.WithdrawDoubleDouble = (id, amount) => { return 9.0; }

Fakes temsilci seçmek için uyguladığı Withdraw yöntemini kullanarak bir lamba ifadesi. stubBankDb.Withdraw Yöntemi temsilci çağırır ve bu nedenle her zaman güvenilir bir şekilde davranışını doğrulamak sınama yöntemi sağlayan belirtilen miktarı verir Accounts yöntemi.

Microsoft Fakes hakkında daha fazla bilgi

Microsoft Fakes ikame sınıflar oluşturmak için iki yaklaşım kullanır:

  1. Saplamaları hedef bağımlılık sınıf üst arabiriminden türeyen ikame sınıfları oluşturmak. Ortak sanal sınıfının yöntemleri hedef için saplama yöntemleri yerine kullanılacak.

  2. Dolgu verileri sanal olmayan yöntemler için bir alternatif dolgu yöntemi hedef yöntemine yapılan çağrı boğulmuş için çalışma zamanı Araçları'nı kullanın.

Her iki yaklaşımdan bağımlılık yöntemine yapılan çağrıların üretilen Temsilciler istediğiniz davranışı test yöntemi belirtmek için kullanın.

Daha fazla bilgi için bkz. Microsoft Fakes ile Test Edilen Kodu Yalıtma.