Kod kapsamını kullanarak ne kadar kodun test edildiğini belirleme

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 vstest.console.exe veya yerel kodu da destekleyen dotnet kapsamı uzantısı olan Microsoft.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

Kod kapsamı özelliği yalnızca Visual Studio Enterprise sürümünde kullanılabilir.

Not

.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ı Çözümle'yi seçin.

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

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

    İpucu

    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 Kod Kapsamı Sonuçları penceresinde Kod Kapsamı Renklendirmeyi Göster'i seçinVisual Studio'da Kod kapsamını analiz et menüsünün ekran görüntüsü. 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ının vurgulandığı ekran görüntüsü.

    Kod Kapsamı Renklendirmesini 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>Göster ayarlarını seçin: Metin Düzenleyicisi. Öğeleri görüntüle'nin altında, "Kapsam" öğelerinin ayarlarını (örneğin, Kapsama Dokunulmayan Alan) ayarlayın.

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

    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 için tipik olarak yaklaşık %80 kod kapsamı hedeflenir. Bazı durumlarda, düşük kapsam kabul edilebilir. Örneğin, düşük kapsamı bazı kodlar standart şablonundan oluşturulduğu kabul edilebilir.

İpucu

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ı alamazsanı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.

İpucu

Visual Studio 2022 Güncelleştirme 2'den başlayarak, Araçlar Seçenekleri Ortam Önizleme Özellikleri'ni ve ardından Kod kapsamı deneyimi geliştirmeleri'ni seçip Visual Studio'yu yeniden başlatarak daha hızlı kod kapsamı test sonuçlarını etkinleştirebilirsiniz.>>>

Bloklar veya satırlar halinde rapor

Kod kapsamı bloklar halinde 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.

Tablo üst bilgisinde Sütun Ekle/Kaldır'ı seçerek satırların sonuçlarının görüntülenmesini de sağlayabilirsiniz. Yüzdeler kaynak kodunda gördüğünüz parçaların boyutuyla daha yakından ilişkili olduğundan bazı kullanıcılar satırları saymayı tercih eder. Birçok satır kaplayan olsa bile uzun bir blok hesaplama tek bir blok olarak sayılacaktır.

İpucu

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 tüm kod bloklarının bazıları ancak tümü uygulanmıyorsa, kısmi bir satır olarak sayılır.

Kod kapsamı sonuçlarını filtreleme

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

  • Değişiklik kümesi Raporunu gö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'na tıklayın. Karşılaştırma raporunu sağlamak için, karşılaştırmak üzere Etkin Depo ve Temel Dalı'nı güncelleştirin.

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 filtre uygulamak için, arama kutusuna türün adını girin.
  • Tümünü göstermek için arama kutusunu temizleyin.
  • %100 tamamen kapsananları göstermek için arama kutusuna "Kapsanan (%Satırlar)":"100" yazın.
  • Kısmen kapsanan %0 & < %100'ü göstermek> için ,## yerine kapsanan yüzdeyi "Kısmen Kapsanan (%Satırlar)":"<##" girin.
  • %0 kapsanan değerini göstermek için arama kutusuna "Kapsanmayan (%Satırlar)":"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. Sonuçlar test verilerini değiştirirseniz veya testlerinizin her defasında yalnızca bir kısmını çalıştırırsanız 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.

Birçok çalıştırmanın sonucunu örneğin farklı test verileri kullanan çalışmalardan birleştirebilirsiniz.

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

  • Önceki bir oturumun sonuçlarını görüntülemek için Kod Kapsamı Sonuçlarını İç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 kod değiştiyse kapsam renklendirmesi yanlış olabilir.

  • Sonuçları metin olarak okunabilir hale getirmek için Kod Kapsamı Sonuçlarını Dışarı Aktar'ı seçin. Bu, diğer araçlarla işleyebileceğiniz veya postayla kolayca gönderebileceğiniz okunabilir bir .coveragexml dosyası oluşturur. Cobertura gibi dışarı aktarma biçimlerini de seçebilirsiniz.

  • Sonuçları başka birine göndermek için bir .coverage dosyası veya dışarı aktarılan bir .coveragexml dosyası gönderin. Sonra dosyayı içe aktarabilirsiniz. Kaynak kodun aynı sürümü varsa, kapsam renklendirmeyi görebilirsiniz.

Farklı çalıştırmalardan sonuçları birleştirme

Bazı durumlarda, test verilerine bağlı olarak kodunuzda farklı bloklar kullanılacaktır. Bu nedenle, farklı bir test çalışmasının sonuçlarını birleştirmek isteyebilirsiniz.

Örneğin, giriş "2" ile bir test çalıştırdığınızda, belirli bir işlevin %50'sinin kapsandığını bulun. Testi "-2" girişiyle ikinci kez çalıştırdığınızda, kapsam renklendirme görünümünde işlevin diğer %50'sinin 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'ünün kapsandığını gösterir.

Bunu yapmak için Kod Kapsamı Sonuçlarını Birleştir'i kullanınKod Kapsamı penceresinde Birleştir düğmesinin simgesi.. Son çalışmaların veya alınan sonuçların herhangi bir bileşimini seçebilirsiniz. Dışa aktarılan sonuçları birleştirmek istiyorsanız, bunları önce almanız gerekir.

Birleştirme işleminin sonuçlarını kaydetmek için Kod Kapsamı Sonuçlarını Dışarı Aktar'ı kullanın.

Birleştirmede 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 test verilerini değiştirerek kodun aynı yapısını kullanın.

  • Dışa ve sonra içe alınmış sonuç dosyasını birleştirirseniz, sonuçları bloklarla değil yalnızca çizgilerle görüntüleyebilirsiniz. Satır verilerini göstermek için Sütun Ekle/Kaldır komutunu kullanın.

  • ASP.NET projesinin testlerinden sonuçları birleştirirseniz, birleştirilmiş değil ayrı testlerin sonuçları görüntülenir. 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

Örneğin kodu bir metin şablonundan oluşturulan tedarik puanlarını kodunuzda belirli öğeler dışında isteyebilirsiniz. özniteliğini System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute şu kod öğelerinden herhangi birine ekleyin: class, struct, method, property, property setter or getter, event.

İpucu

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

Örneğin:

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"functionName");

ExcludeSourceFromCodeCoverage(ExclusionName, L"SourceFilePath");

  • ExclusionName herhangi bir benzersiz addır.

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

  • SourceFilePath , bir .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>

  • Herhangi bir ad alanı veya sınıf içindeki değil genel ad alanındaki dışlama makroları için çağrılar yerleşir.

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

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

Not

C++/CLI kodundaki işlevleri dışlamak için özniteliğini [System::Diagnostics::CodeAnalysis::ExcludeFromCodeCoverage] işleve 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.

Bir .runsettings dosyası yazarak kod kapsamı analizi için hangi derlemelerin ve öğelerin seçildiği üzerinde daha fazla denetim kullanabilirsiniz. Örneğin, kendi sınıfları için öznitelikler eklemek zorunda kalmadan belirli tür derlemeleri hariç tutabilirsiniz. Daha fazla bilgi için bkz . Kod kapsamı analizini ö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 güncel 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çenek tarafından /EnableCodeCoverage çağrılan vstest.console.exe yardımcı programının bir seçeneğidir.

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

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

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

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage
    

    İpucu

    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.