Ne kadar kodun test edildiğini belirlemek için kod kapsamını kullanma

Projenizin kodunun hangi oranının birim testleri gibi kodlanmış testler tarafından test edildiğini belirlemek için Visual Studio'nun kod kapsamı özelliğini kullanabilirsiniz. Hatalara karşı etkili bir şekilde koruma sağlamak için testlerinizin kodunuzun büyük bir kısmını kullanması veya "kapsaması" gerekir.

Kod kapsamı analizi hem yönetilen (CLR) hem de yönetilmeyen (yerel) kod için mümkündür. Hem statik hem de dinamik izleme desteklenir. Komut satırı senaryolarında kod kapsamını kullanmak için, yerel kodu da destekleyen dotnet-coverage uzantısı olan vstest.console.exe veyaMicrosoft.CodeCoverage.Console aracını kullanın.

Kod kapsamı seçeneği, Test Gezgini'ni kullanarak test yöntemlerini çalıştırdığınızda Test menüsünün altında kullanılabilir. Sonuçlar tablosu her derleme, sınıf ve yordamda yürütülen kodun yüzdesini gösterir. Kaynak düzenleyici, test edilen kodu vurgular. Sonuçları Cobertura gibi popüler biçimlerde dışarı aktarabilirsiniz.

Gereksinimler

Not

Kod kapsamı Visual Studio Enterprise, Community ve Professional sürümlerinde kullanılabilir. Visual Studio 2022 ve önceki sürümlerde kod kapsamı özelliği Visual Studio Enterprise sürümüyle sınırlıydı.

Not

Kod kapsamı yalnızca Visual Studio Enterprise ile kullanılabilir. .NET kod kapsamı için alternatif olarak dotnet-coverage komut satırı aracını kullanabilirsiniz.

Kod kapsamını analiz etme

  1. Test menüsünde Tüm Testler için Kod Kapsamını Analiz Etöğesini seçin.

    Kod kapsamını analiz et seçeneğinin vurgulandığı Test menüsünün ekran görüntüsü.

    Bahşiş

    Kod kapsamını Test Gezgini araç penceresinden de çalıştırabilirsiniz.

  2. Testler çalıştırıldıktan sonra, hangi satırların çalıştırıldığını görmek için Visual Studio'da Kod Kapsamını Analiz Et menüsünün ekran görüntüsünde Kod Kapsamı Sonuçları penceresindeki Kod Kapsamı Renklendirmesini Göster seçeneğine tıklayın. Varsayılan olarak, testlerin kapsamına alınan kod açık mavi renkle vurgulanır.

    Kod kapsamının vurgulandığı ekran görüntüsü.

    Kod Kapsamı Renklendirme Göster seçeneğinin açılan listesinde, renklendirmenin kod satırlarına mı, sol kenar boşluğundaki gliflere mi yoksa her ikisine de mi uygulanabileceğini seçebilirsiniz.

  3. Renkleri değiştirmek veya kalın yüz kullanmak için, Araçları>Seçenekleri>Ortam>Yazı Tipleri ve Renkler'i seçin>Ayarlarını göster: Metin Düzenleyicisi. Gösterim öğelerialtında, "Kapsam" öğelerinin ayarlarını değiştirin; örneğin, Kapsanmayan Alan.

    Kod kapsamı yazı tiplerini ve renklerini gösteren ekran görüntüsü

  4. Sonuçlar düşük kapsam gösteriyorsa kodun hangi bölümlerinin uygulanmadığını araştırın ve bunları kapsayacak daha fazla test yazın. Geliştirme ekipleri genellikle yaklaşık 80% kod kapsamını hedefler. Bazı durumlarda daha düşük kapsam kabul edilebilir. Örneğin, standart bir şablondan bazı kodlar oluşturulduğunda daha düşük kapsam kabul edilebilir.

Bahşiş

Kod kapsamını iyileştirmek için:

  • Derleyici iyileştirmeyi kapatın.
  • Yönetilmeyen (yerel) kodla çalışıyorsanız hata ayıklama derlemesi kullanın.
  • Her derleme için .pdb (sembol) dosyaları oluşturun.

Beklediğiniz sonuçları alamıyorsanız bkz. kod kapsamı sorunlarını giderme.

Kodunuzu güncelleştirdikten sonra kod kapsamını yeniden çalıştırmayı unutmayın. Kapsam sonuçları ve kod renklendirilmesi, kodunuzu değiştirdikten veya testleri çalıştırdığınızda otomatik olarak güncelleştirilmez.

Bahşiş

Visual Studio 2022 sürüm 17.2'den başlayarak, Araçları > Seçenekleri > Ortam > Önizleme Özellikleri'ni seçip kod kapsamı deneyimi iyileştirmeleriniseçip Visual Studio'yu yeniden başlatarak en son kod kapsamı özelliklerini etkinleştirebilirsiniz.

Bloklar veya satırlar halinde rapor

Kod kapsamı blokolarak sayılır. Blok, kodun tam olarak bir giriş ve çıkış noktası olan bir parçasıdır. Programın denetim akışı test çalıştırması sırasında bir bloktan geçerse, bu blok kapsanan olarak sayılır. Bloğun kaç kez kullanıldığı sonucu etkilemez.

Ayrıca, tablo üst bilgisinde Sütun Ekle/Kaldır seçerek satırların sonuçlarının görüntülenmesini sağlayabilirsiniz. Yüzdeler kaynak kodda gördüğünüz parçaların boyutuna daha yakın olduğundan bazı kullanıcılar satır sayısını tercih eder. Uzun bir hesaplama bloğu, birçok satır kaplasa bile tek bir blok olarak sayılır.

Bahşiş

Bir kod satırı birden fazla kod bloğu içerebilir. Böyle bir durum söz konusuysa ve test çalıştırması satırdaki tüm kod bloklarını çalıştırırsa, tek satır olarak sayılır. Satırdaki bazı kod blokları uygulanıyorsa ancak hepsi uygulanmıyorsa, kısmi bir satır olarak sayılır.

Kod kapsamı sonuçları görünümleri

Kod Kapsamı Sonuçları penceresi genellikle raporu proje/sınıf/yöntem hiyerarşisinde oluşturur. Bunu, kapsamı dizin/dosya/yöntem düzeyinde gösterecek şekilde değiştirebilirsiniz.

  • Kaynak Raporgörüntülemek için, Kod Kapsamı Sonuçları penceresinde kod kapsamı görünümlerini yapılandır simgesini seçin. Ardından Rapor Stili açılan listesinden Kaynak Görünümü seçin.

Kod Kapsamı Sonuçları penceresinde genellikle çözümün tamamı için sonuç gösterilir. Sonuçlar yalnızca geçerli dalda güncelleştirilmiş dosyaların sonuçlarını gösterecek şekilde filtrelenebilir.

  • Değişiklik kümesi Raporgörüntülemek için, Kod Kapsamı Sonuçları penceresinde Kod Kapsamı Görünümlerini Yapılandır simgesini seçin. Ardından Rapor İçeriği açılan listesinden Değişiklik Kümesi Raporu seçin. Karşılaştırma raporunu sağlamak için, karşılaştırılacak Etkin Depo ve Temel Dalı güncelleyin.

Kod Kapsamı Sonuçları penceresindeki arama kutusunda raporun filtrelenebileceği çeşitli yollar vardır.

  • Ada göre ara (Pencerede yalnızca arama dizesiyle eşleşenleri göster) için arama kutusuna arama dizesini girin.
  • Türe göre filtrelemek için , arama kutusuna türün adını girin.
  • Tümünü göster arama kutusunu temizleyin.
  • 100% tamamen kapsanan Göster'iiçin, arama kutusuna "Kapsanan (%Lines)":"100" yazın.
  • Kısmen kapsanan Show (>0% && < 100%) için , ## değerini kapsanan yüzdeyle değiştirerek "Kısmen Kapsanan (%Lines)":"<##" girin.
  • Kapsanan% 0'ı göster için, arama kutusuna "Kapsanmayan (%Lines)":"0" yazın.

Kod kapsamı sonuçlarını yönetme

Kod Kapsamı Sonuçları penceresi genellikle en son çalıştırmanın sonucunu gösterir. Test verilerinizi değiştirirseniz veya testlerinizin yalnızca bir bölümünü her seferinde çalıştırırsanız sonuçlar değişir.

Kod Kapsamı Sonuçları penceresi, önceki sonuçları veya diğer bilgisayarlarda elde edilen sonuçları görüntülemek için de kullanılabilir.

Farklı test verileri kullanan çalıştırmalar gibi çeşitli çalıştırmaların sonuçlarını birleştirebilirsiniz.

  • önceki bir sonuç kümesini görüntülemek için, açılan menüden seçin. Menüde, yeni bir çözüm açtığınızda temizlenen geçici bir liste gösterilir.

  • Önceki bir oturumsonuçları görüntülemek için Sonuçları İçeri Aktar seçin, çözümünüzdeki TestResults klasörüne gidin ve bir .coverage dosyasını içeri aktarın.

    .coverage dosyası oluşturulduktan sonra kaynak kodun değişmesi durumunda kapsam renklendirmesi yanlış olabilir.

  • Sonuçları metinolarak okunabilir hale getirmek için Sonuçları Dışarı Aktar seçin, Kayıt türü olarakolarak .xml seçin. Bu, diğer araçlarla işleyebileceğiniz veya postayla kolayca gönderebileceğiniz okunabilir bir .xml dosyası oluşturur. Cobertura gibi dışarı aktarma biçimlerini de seçebilirsiniz.

  • Sonuçlarıbaşka birine göndermek için .coverage dosyası veya dışarı aktarılan bir .xml dosyası gönderin. Daha sonra dosyayı içeri aktarabilir. Kaynak kodun aynı sürümüne sahipse kapsam renklendirmeleri görebilirler.

Farklı çalıştırmaların sonuçlarını birleştirme

Bazı durumlarda, test verilerine bağlı olarak kodunuzdaki farklı bloklar kullanılır. Bu nedenle, farklı test çalıştırmalarının sonuçlarını birleştirmek isteyebilirsiniz.

Örneğin, "2" girişiyle bir test çalıştırdığınızda, belirli bir işlevin %50% kapsandığını fark ettiğinizi varsayalım. "-2" girişiyle testi ikinci kez çalıştırdığınızda, kapsam renklendirme görünümünde işlevin diğer %50'sinin% ile kapsandığını görürsünüz. Şimdi iki test çalıştırmasından sonuçları birleştirdiğinizde rapor ve kapsam renklendirme görünümü işlevin 100% ele alındığını gösterir.

Kod Kapsamı penceresinde Birleştir düğmesi için simgesini kullanın. Bunu yapmak için Sonuçları Birleştirin. Son çalıştırmaların veya içeri aktarılan sonuçların herhangi bir bileşimini seçebilirsiniz. Dışarı aktarılan sonuçları birleştirmek istiyorsanız, önce bunları içeri aktarmanız gerekir.

Birleştirme işleminin sonuçlarını kaydetmek için Sonuçları Dışarı Aktarma kullanın.

Birleştirme sınırlamaları

  • Kodun farklı sürümlerinden kapsam verilerini birleştirirseniz sonuçlar ayrı olarak gösterilir, ancak bunlar birleştirilmeyen sonuçlardır. Tam olarak birleştirilmiş sonuçlar almak için kodun aynı derlemesini kullanın ve yalnızca test verilerini değiştirin.

  • Dışarı aktarılmış ve sonra içeri aktarılmış bir sonuç dosyasını birleştirirseniz, sonuçları bloklara göre değil yalnızca satırlara göre görüntüleyebilirsiniz. Satır verilerini göstermek için Sütun Ekle/Kaldır komutunu kullanın.

  • bir ASP.NET projesinin testlerinin sonuçlarını birleştirirseniz, ayrı testlerin sonuçları görüntülenir, ancak birleştirilmemiş olur. Bu davranış yalnızca ASP.NET yapıtlarının kendileri için geçerlidir: diğer derlemelerin sonuçları birleştirilir.

Öğeleri kod kapsamı sonuçlarından dışlama

Kodunuzdaki belirli öğeleri kapsam puanlarının dışında tutmak isteyebilirsiniz; örneğin, kod bir metin şablonundan oluşturulmuşsa. System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute özniteliğini şu kod öğelerinden herhangi birine ekleyin: sınıf, yapı, yöntem, özellik, özellik ayarlayıcısı veya alıcı, olay.

Bahşiş

Bir sınıfın dışlanması, türetilmiş sınıflarını dışlamaz.

Mesela:

using System.Diagnostics.CodeAnalysis;
...
public class ExampleClass1
{
    [ExcludeFromCodeCoverage]
    void ExampleMethod() {...}

    [ExcludeFromCodeCoverage] // exclude property
    int ExampleProperty1
    { get {...} set{...}}

    int ExampleProperty2
    {
        get
        {
            ...
        }
        [ExcludeFromCodeCoverage] // exclude setter
        set
        {
            ...
        }
    }

}
[ExcludeFromCodeCoverage]
class ExampleClass2 { ... }

Aşağıdaki makroları kullanın:

ExcludeFromCodeCoverage( ExclusionName, L"İşlevAdı");

ExcludeSourceFromCodeCoverage( DışlamaAdı, L"KaynakDosyaYolu");

  • ExclusionName herhangi bir benzersiz addır.

  • FunctionName tam nitelikli işlev adıdır. Joker karakterler içerebilir. Örneğin, bir sınıfın tüm işlevlerini dışlamak için MyNamespace::MyClass::* yazın

  • SourceFilePath, .cpp dosyasının yerel veya UNC yoludur. Joker karakterler içerebilir. Aşağıdaki örnek belirli bir dizindeki tüm dosyaları dışlar: \\MyComputer\Source\UnitTests\*.cpp

  • #include <CodeCoverage\CodeCoverage.h>

  • Dışlama makrolarına çağrıları herhangi bir ad alanı veya sınıf içinde değil, global ad alanı içinde yerleştirin.

  • Dışlamaları birim test kodu dosyasına veya uygulama kodu dosyasına yerleştirebilirsiniz.

  • Dışlamalar, derleyici seçeneği ayarlanarak veya #pragma managed(off)kullanılarak yönetilmeyen (yerel) kod olarak derlenmelidir.

Not

C++/CLI kodundaki işlevleri dışlamak için işleve [System::Diagnostics::CodeAnalysis::ExcludeFromCodeCoverage] özniteliğini uygulayın. Bu, C# ile aynıdır.

Ek öğeleri dahil et veya hariç tut

Kod kapsamı analizi yalnızca yüklenen ve .pdb dosyasının .dll veya .exe dosyasıyla aynı dizinde kullanılabildiği derlemelerde gerçekleştirilir. Bu nedenle, bazı durumlarda uygun .pdb dosyalarının kopyalarını alarak dahil edilen derleme kümesini genişletebilirsiniz.

.runsettings dosyası yazarak kod kapsamı analizi için hangi derlemelerin ve öğelerin seçildiği üzerinde daha fazla denetime sahip olabilirsiniz. Örneğin, sınıflarına öznitelik eklemek zorunda kalmadan belirli türlerdeki derlemeleri dışlayabilirsiniz. Daha fazla bilgi için bkz. kod kapsamı çözümlemesini özelleştirme .

Azure Pipelines'da kod kapsamını analiz etme

Kodunuzu iade ettiğinizde, testleriniz diğer ekip üyelerinin testleriyle birlikte derleme sunucusunda çalışır. Projenin tamamında kapsamın en up-totarih ve kapsamlı resmini elde etmek için Azure Pipelines'da kod kapsamını analiz etmek yararlıdır. Azure Pipelines'daki kod kapsamı, otomatik sistem testlerini ve genellikle geliştirme makinelerinde çalıştırmadığınız diğer kodlanmış testleri de içerir.

Komut satırından kod kapsamını analiz etme

Testleri komut satırından çalıştırmak için vstest.console.exe yardımcı programını kullanın. Kod kapsamı, seçeneği tarafından çağrılan /EnableCodeCoverage yardımcı programının bir seçeneğidir.

  1. Visual Studio için Geliştirici Komut İstemi'ni başlatın:

    Windows Başlangıç menüsünde Developer Command Prompt for VS arama yapın ve arama metninizle ilişkili Uygulama sonucunu seçin.

  2. Komut isteminde aşağıdaki komutu çalıştırın:

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage
    

    Bahşiş

    Geliştirici PowerShell için kabuğun başlangıç dizini Visual Studio Proje Konumu'dur. MyTestAssembly.dll'ı yol ve test dosyası adıyla değiştirin. Daha fazla bilgi için bkz. VSTest.Console.exe komut satırı seçenekleri.

Sorun Giderme

Kod kapsamı sonuçlarını görmüyorsanız, Kod kapsamı sorunlarını giderme makalesi size yardımcı olabilir.