Birim testi temel bilgileri

Birim testleri oluşturup çalıştırarak kodunuzun beklendiği gibi çalışıp çalışmadığını denetleyin. Buna birim testi denir çünkü programınızın işlevselliğini ayrı birimler olarak test edilebilecek ayrı test edilebilir davranışlara bölersiniz. Visual Studio Test Gezgini, birim testlerinizi çalıştırmak ve sonuçlarını Visual Studio'da görüntülemek için esnek ve verimli bir yol sağlar. Visual Studio, yönetilen ve yerel kod için Microsoft birim testi çerçevelerini yükler. Birim testleri oluşturmak, bunları çalıştırmak ve bu testlerin sonuçlarını raporlamak için bir birim testi çerçevesi kullanın. Kodunuzun hala düzgün çalışıp çalışmadığını test etmek için değişiklik yaptığınızda birim testlerini yeniden çalıştırın. Visual Studio Enterprise bunu, kod değişikliklerinizden etkilenen testleri algılayan ve siz yazarken arka planda çalıştıran Canlı Birim Testi ile otomatik olarak yapabilir.

Birim testi, yazılım geliştirme iş akışınızın ayrılmaz bir parçası olduğunda kodunuzun kalitesi üzerinde en büyük etkiye sahiptir. Bir işlev veya başka bir uygulama kodu bloğu yazdığınız anda, standart, sınır ve yanlış giriş verileri durumlarına yanıt olarak kodun davranışını doğrulayan ve kod tarafından yapılan açık veya örtük varsayımları denetleyebilen birim testleri oluşturun. Test temelli geliştirme ile, kodu yazmadan önce birim testlerini oluşturursunuz, böylece birim testlerini hem tasarım belgeleri hem de işlevsel belirtimler olarak kullanırsınız.

Test Gezgini, Test Gezgini eklenti arabirimlerini uygulayan üçüncü taraf ve açık kaynak birim testi çerçevelerini de çalıştırabilir. Bu çerçevelerin çoğunu Visual Studio Uzantı Yöneticisi ve Visual Studio galerisi aracılığıyla ekleyebilirsiniz. Daha fazla bilgi için bkz . Üçüncü taraf birim testi çerçevelerini yükleme.

Kodunuzdan hızlı bir şekilde test projeleri ve test yöntemleri oluşturabilir veya testleri ihtiyacınız olan şekilde el ile oluşturabilirsiniz. .NET kodunu keşfetmek için IntelliTest kullandığınızda, test verileri ve birim testleri paketi oluşturabilirsiniz. Koddaki her deyim için, bu deyimi yürütecek bir test girişi oluşturulur. .NET kodu için birim testleri oluşturmayı öğrenin.

Kullanmaya başlayın

Sizi doğrudan kodlamaya götüren birim testine giriş için şu konulardan birine bakın:

Banka çözümü örneği

Bu makalede örnek olarak adlandırılan MyBank kurgusal bir uygulamanın geliştirilmesini kullanacağız. Bu konudaki açıklamaları izlemek için gerçek koda ihtiyacınız yoktur. Test yöntemleri C# dilinde yazılır ve Yönetilen Kod için Microsoft Unit Testing Framework kullanılarak sunulur. Ancak, kavramlar kolayca diğer dillere ve çerçevelere aktarılır.

MyBank Solution 2019

MyBank Solution 2022

Uygulama için MyBank ilk tasarım denememiz, tek bir hesabı ve bankayla olan işlemlerini temsil eden bir hesap bileşenini ve tek tek hesapları toplama ve yönetme işlevini temsil eden bir veritabanı bileşenini içerir.

İki proje içeren bir Bank çözüm oluşturuyoruz:

  • Accounts

  • BankDB

Projeyi tasarlamaya Accounts yönelik ilk denememiz, bir hesap hakkında temel bilgileri tutan bir sınıf, hesaptan varlıkların yatırılması ve geri çekilmesi gibi her tür hesabın ortak işlevselliğini belirten bir arabirim ve bir denetim hesabını temsil eden arabirimden türetilmiş bir sınıf içerir. Hesaplar projelerine aşağıdaki kaynak dosyaları oluşturarak başlıyoruz:

  • AccountInfo.cs , bir hesabın temel bilgilerini tanımlar.

  • IAccount.cs bir hesap için, bir hesaptan varlık yatırma ve çekme ve hesap bakiyesini alma yöntemleri de dahil olmak üzere standart IAccount bir arabirim tanımlar.

  • CheckingAccount.cs, bir çek hesabı için arabirimi uygulayan IAccount sınıfı içerirCheckingAccount.

Bir çek hesabından çekmenin yapması gereken bir şeyin, çekilen tutarın hesap bakiyesinden daha az olduğundan emin olmak olduğunu deneyimden biliyoruz. Bu nedenle, içinde yöntemini CheckingAccount bu koşulu denetleen bir yöntemle geçersiz kılarızIAccount.Withdraw. yöntemi şu şekilde görünebilir:

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

Artık kodumuz olduğuna göre test etme zamanı geldi.

Birim testi projeleri ve test yöntemleri oluşturma (C#)

C# için genellikle kodunuzdan birim testi projesini ve birim testi saptamalarını oluşturmak daha hızlıdır. İsterseniz gereksinimlerinize bağlı olarak birim testi projesini ve testlerini el ile oluşturmayı da seçebilirsiniz. 3. taraf çerçevesiyle koddan birim testleri oluşturmak istiyorsanız şu uzantılardan birinin yüklü olması gerekir: NUnit veya xUnit. C# kullanmıyorsanız, bu bölümü atlayın ve Birim testi projesini ve birim testlerini el ile oluşturma bölümüne gidin.

Birim testi projesi ve birim testi saptamaları oluşturma

  1. Kod düzenleyicisi penceresinde sağ tıklayın ve sağ tıklama menüsünden Birim Testleri Oluştur'u seçin.

    From the editor window, view the context menu

    Not

    Birim Testleri Oluştur menü komutu yalnızca C# kodu için kullanılabilir. Bu yöntemi .NET Core veya .NET Standard ile kullanmak için Visual Studio 2019 veya üzeri gereklidir.

    From the editor window, view the context menu

    Not

    Birim Testleri Oluştur menü komutu yalnızca C# kodu için kullanılabilir. Bu yöntemi .NET Core veya .NET Standard ile kullanmak için Visual Studio 2019 veya üzeri gereklidir.

  2. Birim testlerinizi oluşturmak için varsayılan değerleri kabul etmek veya birim testi projesini ve birim testlerini oluşturmak ve adlandırmak için kullanılan değerleri değiştirmek için Tamam'a tıklayın. Birim testi yöntemlerine varsayılan olarak eklenen kodu seçebilirsiniz.

    Create Unit Tests dialog box in Visual Studio

    Create Unit Tests dialog box in Visual Studio

  3. Birim testi saptamaları, sınıfındaki tüm yöntemler için yeni bir birim testi projesinde oluşturulur.

    The unit tests are created

    The unit tests are created

  4. Şimdi, birim testinizi anlamlı hale getirmek için testlerinizi yazma ve kodunuzu kapsamlı bir şekilde test etmek için eklemek isteyebileceğiniz ek birim testleri hakkında bilgi edinin.

Birim testi projesini ve birim testlerini el ile oluşturma

Birim testi projesi genellikle tek bir kod projesinin yapısını yansıtır. MyBank örneğinde, çözüme Bank ve BankDbTests adlı AccountsTests iki birim testi projesi eklersiniz. Test projesi adları rastgeledir, ancak standart adlandırma kuralını benimsemek iyi bir fikirdir.

Çözüme birim testi projesi eklemek için:

  1. Çözüm Gezgini'da çözüme sağ tıklayın ve Yeni Proje Ekle'yi>seçin.

  2. Kullanmak istediğiniz test çerçevesine yönelik birim testi proje şablonunu bulmak için proje şablonu arama kutusuna test yazın. (Bu konudaki örneklerde MSTest kullanıyoruz.)

  3. Sonraki sayfada projeyi adlandırın. Örneğimizin projesini Accounts test etmek için projeyi AccountsTestsolarak adlandırabilirsiniz.

  4. Birim testi projenizde, test altındaki kod projesine, örneğimizde Hesaplar projesine bir başvuru ekleyin.

    Kod projesine başvuru oluşturmak için:

    1. Çözüm Gezgini'daki birim testi projesinde, Başvurular veya Bağımlılıklar düğümüne sağ tıklayın ve proje başvurusu ekle veya Başvuru Ekle'yi (hangisi varsa) seçin.

    2. Başvuru Yöneticisi iletişim kutusunda Çözüm düğümünü açın ve Projeler'i seçin. Kod projesi adını seçin ve iletişim kutusunu kapatın.

Her birim testi projesi, kod projesindeki sınıfların adlarını yansıtan sınıflar içerir. Bizim örneğimizde proje AccountsTests aşağıdaki sınıfları içerir:

  • AccountInfoTests sınıfı, projedeki sınıfın AccountInfoAccounts birim testi yöntemlerini içerir

  • CheckingAccountTests sınıfı için CheckingAccount birim testi yöntemlerini içerir.

Testlerinizi yazma

Kullandığınız birim testi çerçevesi ve Visual Studio IntelliSense, bir kod projesi için birim testlerinizin kodunu yazma konusunda size yol gösterir. Test Gezgini'nde çalıştırmak için çoğu çerçeve, birim testi yöntemlerini tanımlamak için belirli öznitelikler eklemenizi gerektirir. Çerçeveler ayrıca test yönteminin geçirilip geçirilmediğini veya başarısız olduğunu göstermek için genellikle assert deyimleri veya yöntem öznitelikleri aracılığıyla bir yol sağlar. Diğer öznitelikler, sınıf başlatma sırasında ve her test yönteminden önce ve her test yönteminden sonra ve sınıf yok edilmeden önce çalıştırılan yok etme yöntemleri olan isteğe bağlı kurulum yöntemlerini tanımlar.

AAA (Düzenleme, Eylem, Onay) deseni, test altındaki bir yöntem için birim testleri yazmanın yaygın bir yoludur.

  • Birim testi yönteminin Düzenleme bölümü nesneleri başlatır ve test altındaki yönteme geçirilen verilerin değerini ayarlar.

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

  • Assert bölümü, test altındaki yönteminin eyleminin beklendiği gibi davrandığını doğrular. .NET için, sınıftaki Assert yöntemler genellikle doğrulama için kullanılır.

Örneğimizin yöntemini test CheckingAccount.Withdraw etmek için iki test yazabiliriz: biri yöntemin standart davranışını doğrulayan, diğeri de bakiyeden daha fazla çekme işleminin başarısız olacağını doğrulayan bir test (Aşağıdaki kod, .NET'te desteklenen bir MSTest birim testi gösterir.). sınıfına CheckingAccountTests aşağıdaki yöntemleri ekleriz:

[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);

    // assert
    Assert.AreEqual(expected, account.Balance);
}

[TestMethod]
public void Withdraw_AmountMoreThanBalance_Throws()
{
    // arrange
    var account = new CheckingAccount("John Doe", 10.0);

    // act and assert
    Assert.ThrowsException<System.ArgumentException>(() => account.Withdraw(20.0));
}

Microsoft birim testi çerçeveleri hakkında daha fazla bilgi için aşağıdaki konulardan birine bakın:

Birim testleri için zaman aşımlarını ayarlama

MSTest çerçevesini kullanıyorsanız, tek bir test yönteminde zaman aşımı ayarlamak için öğesini kullanabilirsiniz TimeoutAttribute :

[TestMethod]
[Timeout(2000)]  // Milliseconds
public void My_Test()
{ ...
}

Zaman aşımını izin verilen en yüksek değere ayarlamak için:

[TestMethod]
[Timeout(TestTimeout.Infinite)]  // Milliseconds
public void My_Test ()
{ ...
}

Test Gezgini'nde testleri çalıştırma

Test projesini oluşturduğunuzda, testler Test Gezgini'nde görünür. Test Gezgini görünmüyorsa Visual Studio menüsünde Test'i seçin, Windows'u ve ardından Test Gezgini'ni seçin (veya Ctrl + E, T tuşlarına basın).

Unit Test Explorer

Unit Test Explorer

Testlerinizi çalıştırır, yazar ve yeniden çalıştırırken, Test Gezgini sonuçları Başarısız Testler, Geçirilen Testler, Atlanan Testler ve Çalıştırılmayan Testler gruplarında görüntüleyebilir. Araç çubuğundaki farklı gruplandırma ölçütü seçeneklerini belirleyebilirsiniz.

Ayrıca genel düzeydeki arama kutusundaki metinleri eşleştirerek veya önceden tanımlanmış filtrelerden birini seçerek herhangi bir görünümdeki testleri filtreleyebilirsiniz. İstediğiniz zaman herhangi bir test seçimini çalıştırabilirsiniz. Bir test çalıştırmasının sonuçları, gezgin penceresinin üst kısmındaki geçiş/başarısız çubuğunda hemen görünür. Testi seçtiğinizde test yöntemi sonucunun ayrıntıları görüntülenir.

Testleri çalıştırma ve görüntüleme

Test Gezgini araç çubuğu, ilgilendiğiniz testleri bulmanıza, düzenlemenize ve çalıştırmanıza yardımcı olur.

Run tests from the Test Explorer toolbar

Run tests from the Test Explorer toolbar

Tüm testlerinizi çalıştırmak için Tümünü Çalıştır'ı seçebilir (veya Ctrl + R, V tuşlarına basabilir) veya çalıştırılacak testlerin bir alt kümesini seçmek için Çalıştır'ı seçebilirsiniz (Ctrl + R, T). Test ayrıntıları bölmesinde bu testin ayrıntılarını görüntülemek için bir test seçin. Seçili testin kaynak kodunu görüntülemek için sağ tıklama menüsünden Testi Aç'ı (Klavye: F12) seçin.

Tek tek testlerin herhangi bir sırada çalıştırılmasını engelleyen bağımlılıkları yoksa, araç çubuğunun ayarlar menüsünde paralel test yürütmeyi açın. Bu, tüm testleri çalıştırmak için geçen süreyi önemli ölçüde azaltabilir.

Her derlemeden sonra testleri çalıştırma

Her yerel derlemeden sonra birim testlerinizi çalıştırmak için Test Gezgini araç çubuğunda ayarlar simgesini açın ve Derlemeden Sonra Testleri Çalıştır'ı seçin.

Test listesini filtreleme ve gruplandırma

Çok sayıda test yaptığınızda, listeyi belirtilen dizeye göre filtrelemek için Test Gezgini arama kutusuna yazabilirsiniz. Filtre listesinden seçim yaparak filtre olayınızı daha fazla kısıtlayabilirsiniz.

Search filter categories

Search filter categories

Düğme Açıklama
Test Explorer group button Testlerinizi kategoriye göre gruplandırmak için Gruplandır düğmesini seçin.

Daha fazla bilgi için bkz . Test Gezgini ile birim testleri çalıştırma.

Soru-Cevap

S: Birim testlerinin hatalarını Nasıl yaparım??

Y: Testleriniz için hata ayıklama oturumu başlatmak için Test Gezgini'ni kullanın. Visual Studio hata ayıklayıcısıyla kodunuzu sorunsuzca adım adım ilerleterek birim testleri ile test altındaki proje arasında gidip gelirsiniz. Hata ayıklamayı başlatmak için:

  1. Visual Studio düzenleyicisinde, hata ayıklamak istediğiniz bir veya daha fazla test yönteminde bir kesme noktası ayarlayın.

    Not

    Test yöntemleri herhangi bir sırada çalışabildiğinden, hata ayıklamak istediğiniz tüm test yöntemlerinde kesme noktaları ayarlayın.

  2. Test Gezgini'nde test yöntemlerini seçin ve ardından kısayol menüsünden Seçili Testlerde Hata Ayıkla'yı seçin.

Birim testlerinde hata ayıklama hakkında daha fazla bilgi edinin.

S: TDD kullanıyorsam testlerimden nasıl kod oluşturabilirim?

Y: Proje kodunuzda sınıflar ve yöntemler oluşturmak için Hızlı Eylemler'i kullanın. Oluşturmak istediğiniz sınıfı veya yöntemi çağıran bir test yönteminde bir deyim yazın, ardından hatanın altında görüntülenen ampulü açın. Çağrı yeni sınıfın bir oluşturucusundaysa, menüden Tür oluştur'u seçin ve sınıfı kod projenize eklemek için sihirbazı izleyin. Çağrı bir yönteme ise IntelliSense menüsünden Yöntem oluştur'u seçin.

Generate Method Stub Quick Action Menu

Generate Method Stub Quick Action Menu

S: Testi çalıştırmak için giriş olarak birden çok veri kümesi alan birim testleri oluşturabilir miyim?

Y: Evet. Veri temelli test yöntemleri , bir değer aralığını tek bir birim test yöntemiyle test edebilirsiniz. Test etmek istediğiniz değişken değerlerini içeren veri kaynağını belirten test yöntemi için bir DataRowveya DynamicDataDataSource özniteliği kullanın.

Öznitelikli yöntem, veri kaynağındaki her satır için bir kez çalışır. Yinelemelerden herhangi biri başarısız olursa Test Gezgini yöntemi için bir test hatası bildirir. yönteminin test sonuçları ayrıntı bölmesi, her veri satırı için geçiş/başarısız durum yöntemini gösterir.

Veri temelli birim testleri hakkında daha fazla bilgi edinin.

S: Birim testlerimde kodumun ne kadarının test edilmiş olduğunu görüntüleyebilir miyim?

Y: Evet. Visual Studio Enterprise'daki Visual Studio kod kapsamı aracını kullanarak birim testleriniz tarafından gerçekten test edilen kodunuzun miktarını belirleyebilirsiniz. Yerel ve yönetilen diller ve Birim Test Çerçevesi tarafından çalıştırılabilir tüm birim testi çerçeveleri desteklenir.

Kod kapsamını seçili testlerde veya çözümdeki tüm testlerde çalıştırabilirsiniz. Kod Kapsamı Sonuçları penceresi, satır, işlev, sınıf, ad alanı ve modül tarafından çalıştırılan ürün kodu bloklarının yüzdesini görüntüler.

Bir çözümde test yöntemleri için kod kapsamını çalıştırmak için Tüm Testler için Test>Çözümleme Kod Kapsamı'nı seçin.

Kapsam sonuçları Kod Kapsamı Sonuçları penceresinde görünür.

Code coverage results

Code coverage results

Kod kapsamı hakkında daha fazla bilgi edinin.

S: Kodumda dış bağımlılıkları olan yöntemleri test edebilir miyim?

Y: Evet. Visual Studio Enterprise kullanıyorsanız Microsoft Fakes, yönetilen kod için birim testi çerçevelerini kullanarak yazdığınız test yöntemleriyle kullanılabilir.

Microsoft Fakes, dış bağımlılıklar için yedek sınıflar oluşturmak için iki yaklaşım kullanır:

  1. Saplamalar, hedef bağımlılık sınıfının üst arabiriminden türetilen yedek sınıflar oluşturur. Saplama yöntemleri, hedef sınıfın genel sanal yöntemleriyle değiştirilebilir.

  2. Dolgular, sanal olmayan yöntemler için çağrıları hedef yönteme alternatif dolgu yöntemine yönlendirmek için çalışma zamanı izlemesini kullanır.

Her iki yaklaşımda da, test yönteminde istediğiniz davranışı belirtmek için bağımlılık yöntemine yönelik çağrıların oluşturulan temsilcilerini kullanırsınız.

Microsoft Fakes ile birim testi yöntemlerini yalıtma hakkında daha fazla bilgi edinin.

S: Birim testleri oluşturmak için diğer birim testi çerçevelerini kullanabilir miyim?

Y: Evet, diğer çerçeveleri bulmak ve yüklemek için bu adımları izleyin. Visual Studio'yu yeniden başlattıktan sonra, birim testlerinizi oluşturmak için çözümünüzü yeniden açın ve ardından yüklü çerçevelerinizi buradan seçin:

Select other installed unit test framework

Birim testi saptamalarınız seçilen çerçeve kullanılarak oluşturulur.