Canlı Birim Testi ile ilgili sık sorulan sorular

Desteklenen çerçeveler

Live Unit Testing hangi test çerçevelerini destekler ve desteklenen en düşük sürümler nelerdir?

Canlı Birim Testi, aşağıdaki tabloda listelenen üç popüler birim testi çerçevesiyle çalışır. Bağdaştırıcılarının ve çerçevelerinin desteklenen en düşük sürümü de tabloda listelenmiştir. Birim testi çerçevelerinin tümü NuGet.org kullanılabilir.

Test Çerçevesi Visual Studio Bağdaştırıcısı en düşük sürümü Çerçeve en düşük sürümü
xUnit.net xunit.runner.visualstudio sürüm 2.2.0-beta3-build1187 xunit 1.9.2
NUnit NUnit3TestAdapter sürüm 3.7.0 NUnit sürüm 3.5.0
MSTest MSTest.TestAdapter 1.1.4-preview MSTest.TestFramework 1.0.5-preview

Başvuruda Microsoft.VisualStudio.QualityTools.UnitTestFramework bulunan eski MSTest tabanlı test projeleriniz varsa ve daha yeni MSTest NuGet paketlerine geçmek istemiyorsanız Visual Studio 2019 veya Visual Studio 2017'ye yükseltin.

.NET Core desteği

Canlı Birim Testi .NET Core ile çalışır mı?

Evet. Live Unit Testing , .NET Core ve .NET Framework ile çalışır.

Yapılandırma

Live Unit Testing'i etkinleştirdiğimde neden çalışmıyor?

Çıkış penceresi (Canlı Birim Testi açılan listesi seçili olduğunda), Canlı Birim Testi'nin neden çalışmadığından size haber vermelidir. Canlı Birim Testi aşağıdaki nedenlerden biri nedeniyle çalışmayabilir:

  • Çözümdeki projeler tarafından başvuruda bulunan NuGet paketleri geri yüklenmediyse Live Unit Testing çalışmaz. Live Unit Testing'i açmadan önce çözümün açık bir derlemesini gerçekleştirmek veya çözümde NuGet paketlerini geri yüklemek bu sorunu çözmelidir.

  • Projelerinizde MSTest tabanlı testler kullanıyorsanız, başvuruyu Microsoft.VisualStudio.QualityTools.UnitTestFrameworkkaldırdığınızdan ve en son MSTest NuGet paketlerine MSTest.TestAdapter başvuru eklediğinizden emin olun (en düşük 1.1.11 sürümü gereklidir) ve MSTest.TestFramework (en düşük 1.1.11 sürümü gereklidir). Daha fazla bilgi için Visual Studio'da Canlı Birim Testi Kullanma makalesinin "Desteklenen test çerçeveleri" bölümüne bakın.

  • Çözümünüzdeki en az bir projenin NuGet başvurusu veya xUnit, NUnit veya MSTest test çerçevesine doğrudan başvurusu olmalıdır. Bu proje, ilgili Visual Studio test bağdaştırıcıları NuGet paketine de başvurmalıdır.

Projem neden oluşturmuyor?

Canlı Birim Testi açılan listesi seçildiğinde derleme hataları Çıkış penceresine bildirilir. Kurulum sihirbazındaki yanlış yapılandırmanın neden olduğu ve Live Unit Testing'te derleme sorunlarına neden olabilecek birkaç yaygın sorun vardır.

  • Çalışma Alanı Kökü özelliği çok uzunsa, yolun çok uzun olduğunu belirten özel durumlar nedeniyle derleme başarısız olabilir.

  • Depo Kökü özelliği depo köküne işaret etmiyorsa, çalışma alanı yanlış dosya kümesiyle doldurulur.

  • Git depoları için Dosyaları dışla özelliği genellikle gitignore dosyasında belirtilen dosyaların kopyalanmasını önler. Ancak, yoksayılan git deposundaki dosyaları iade etmek mümkündür veya dosyaları otomatik olarak oluşturan araçları çalıştırmak mümkündür, ancak bunlar derleme sırasında oluşturulmaz. Bu durumlarda, "<Özel>" seçeneği belirlenmeli ve yalnızca yapıt klasörlerini listeleyen özel bir kural kümesi listelenmelidir.

Daha önce açıklanan sorunların yanı sıra, aşağıdaki proje yapılandırmaları doğru derlenmeyebilir.

  • Proje bağımlılıkları her proje için değil genel bir çözüm yapılandırması olarak ProjectReferences belirtilirse, Live Unit Testing yanlış proje kümesi oluşturabilir. Bunu düzeltmek için projeler arasına açık başvurular ekleyin.

  • Canlı Birim Testi çalma listesi seçilene kadar, Live Unit Testing herhangi bir proje oluşturmaz. Bunu düzeltmek için Live Unit Testing çalma listesine bazı testler ekleyin.

  • Projelerinizde MSTest tabanlı testler kullanıyorsanız, başvuruyu Microsoft.VisualStudio.QualityTools.UnitTestFrameworkkaldırdığınızdan ve en son MSTest NuGet paketlerine MSTest.TestAdapter başvuru eklediğinizden emin olun (en düşük 1.1.11 sürümü gereklidir) ve MSTest.TestFramework (en düşük 1.1.11 sürümü gereklidir). Daha fazla bilgi için bkz . Desteklenen test çerçeveleri.

  • Çözümünüzdeki en az bir projenin NuGet başvurusu veya xUnit, NUnit veya MSTest test çerçevesine doğrudan başvurusu olmalıdır. Bu proje, ilgili Visual Studio test bağdaştırıcıları NuGet paketine de başvurmalıdır. Visual Studio test bağdaştırıcısına bir .runsettings dosyası aracılığıyla da başvurulabilir. .runsettings dosyasının aşağıdaki örneğe benzer bir girdisi olmalıdır:

<RunSettings>
    <RunConfiguration>
          <TestAdaptersPaths>path-to-your-test-adapter</TestAdaptersPaths>
    </RunConfiguration>
</RunSettings>

Testlerim neden çalıştırılmıyor?

  • Sık karşılaşılan bir sorun, tüm dosyaların test klasörüne kopyalanmamasıdır. Csproj dosyalarına bazı Live Unit Testing Test Dependency öğeleri eklemeniz gerekebilir.

  • Bir diğer sorun da zaman aşımlarıdır. Live Unit Testing testleri süresiz olarak çalıştırdığından, testler çok uzun süre çalışırsa otomatik olarak bir çalıştırmayı durdurur. Projenin Sihirbazı'nda zaman aşımını artırabilirsiniz.

Yükseltmeden sonra yanlış kapsam

Visual Studio Projelerinizde başvuruda bulunan test bağdaştırıcısını desteklenen sürüme yükselttikte Live Unit Testing neden yanlış kapsam gösteriyor?

  • Çözümdeki birden çok proje NuGet test bağdaştırıcısı paketine başvuruyorsa, bunların her biri desteklenen sürüme yükseltilmelidir.

  • Test bağdaştırıcısı paketinden içeri aktarılan MSBuild .props dosyasının da doğru güncelleştirildiğinden emin olun. İçeri aktarma işleminin NuGet paket sürümünü/yolunu denetleyin; bu sürüm genellikle proje dosyasının üst kısmında bulunur, örneğin:

      <Import Project="..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props" Condition="Exists('..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props')" />
    

Derlemeleri özelleştirme

Live Unit Testing derlemelerimi özelleştirebilir miyim?

Çözümünüz izleme (Live Unit Testing) için "normal" izlemesiz derleme için gerekli olmayan özel adımlar gerektiriyorsa, projenize veya özelliği denetleyen BuildingForLiveUnitTesting ve derleme öncesi/sonrası özel adımlar gerçekleştiren .targets dosyalarına kod ekleyebilirsiniz. Ayrıca, bu proje özelliğini temel alan bir Canlı Birim Testi derlemesine belirli derleme adımlarını (paketleri yayımlama veya oluşturma gibi) kaldırmayı veya derleme adımlarını (önkoşulları kopyalama gibi) eklemeyi de seçebilirsiniz. Derlemenizi bu özelliğe göre özelleştirmek normal derlemenizi hiçbir şekilde değiştirmez ve yalnızca Live Unit Testing derlemelerini etkiler.

Örneğin, normal derleme sırasında NuGet paketleri üreten bir hedef olabilir. Yaptığınız her düzenlemeden sonra NuGet paketlerinin oluşturulmasını büyük olasılıkla istemezsiniz. Bu nedenle, aşağıdakine benzer bir işlem yaparak Canlı Birim Testi derlemesinde bu hedefi devre dışı bırakabilirsiniz:

<Target Name="GenerateNuGetPackages" BeforeTargets="AfterBuild" Condition="'$(BuildingForLiveUnitTesting)' != 'true'">
    <Exec Command='"$(MSBuildThisFileDirectory)..\tools\GenPac" '/>
</Target>

Test Gezgini ile Canlı Birim Testi karşılaştırması

Testleri Test Gezgini penceresinden çalıştırmanın, Canlı Birim Testi'nde testleri çalıştırmadan farkı nedir?

Çeşitli farklar vardır:

  • Test Gezgini penceresinde testleri çalıştırmak veya testlerde hata ayıklamak normal ikili dosyaları çalıştırırken, Canlı Birim Testi ise izlemeli ikili dosyaları çalıştırır. İzlemeli ikili dosyaların hatalarını ayıklamak istiyorsanız, test yönteminize debugger.Launch yöntemi çağrısı eklemek, hata ayıklayıcının bu yöntem her yürütülürken başlatılmasına neden olur (Canlı Birim Testi tarafından yürütülürken dahil) ve ardından izleme ikili dosyasını ekleyip hatalarını ayıklayabilirsiniz. Ancak çoğu kullanıcı senaryosunda izlemenin sizin için şeffaf olmasını ve izlemeli ikili dosyaların hatalarını ayıklamanıza gerek olmadığını umuyoruz.

  • Canlı Birim Testi testleri çalıştırmak için yeni bir uygulama etki alanı oluşturmaz, ancak Test Gezgini penceresinden çalıştırılacak testler yeni bir uygulama etki alanı oluşturur.

  • Canlı Birim Testi, testleri her test derlemesinde sırayla çalıştırır. Test Gezgini'nde birden çok testi paralel olarak çalıştırmayı seçebilirsiniz.

  • Test Gezgini testleri varsayılan olarak tek iş parçacıklı bir dairede (STA) çalıştırırken, Live Unit Testing testleri çok iş parçacıklı bir dairede (MTA) çalıştırır. Canlı Birim Testi'nde STA'da MSTest testleri çalıştırmak için test yöntemini veya içeren sınıfı NuGet paketinde MSTest.STAExtensions 1.0.3-beta bulunabilecek veya <STATestClass> özniteliğiyle <STATestMethod> süsleyin. NUnit için test yöntemini özniteliğiyle <RequiresThread(ApartmentState.STA)> ve xUnit için özniteliğiyle süsleyin <STAFact> .

Testleri dışlama

Testleri Canlı Birim Testi'ne katılmadan hariç Nasıl yaparım??

Kullanıcıya özgü ayar için Visual Studio'da Canlı Birim Testi Kullanma makalesinin "Test projelerini ve test yöntemlerini dahil etme ve hariç tutma" bölümüne bakın. Testleri dahil etmek veya dışlamak, belirli bir düzenleme oturumu için belirli bir test kümesini çalıştırmak veya kendi kişisel tercihlerinizi kalıcı hale getirmek istediğinizde yararlıdır.

Çözüme özgü ayarlar için özniteliklerini System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute program aracılığıyla uygulayarak yöntemleri, özellikleri, sınıfları veya yapıları Canlı Birim Testi tarafından izlenmesini engelleyebilirsiniz. Ayrıca, projenin tamamının <ExcludeFromCodeCoverage> izlenmemesini sağlamak için proje dosyanızda özelliğini true olarak da ayarlayabilirsiniz. Canlı Birim Testi henüz izlenmemiş testleri çalıştırmaya devam eder, ancak kapsamları görselleştirilmeyecektir.

Ayrıca geçerli uygulama etki alanına yüklenip yüklenmediğini Microsoft.CodeAnalysis.LiveUnitTesting.Runtime denetleyebilir ve nedene bağlı olarak testleri devre dışı bırakabilirsiniz. Örneğin, xUnit ile aşağıdakine benzer bir şey yapabilirsiniz:

[ExcludeFromCodeCoverage]
public class SkipLiveFactAttribute : FactAttribute
{
   private static bool s_lutRuntimeLoaded = AppDomain.CurrentDomain.GetAssemblies().Any(a => a.GetName().Name ==
                                            "Microsoft.CodeAnalysis.LiveUnitTesting.Runtime");
   public override string Skip => s_lutRuntimeLoaded ? "Test excluded from Live Unit Testing" : "";
}

public class Class1
{
   [SkipLiveFact]
   public void F()
   {
      Assert.True(true);
   }
}

Sürekli derlemeler

Herhangi bir düzenleme yapmasam bile Live Unit testi neden çözümümü sürekli oluşturmaya devam ediyor?

Derleme işlemi çözümün kendi parçası olan kaynak kodu oluşturuyorsa ve derleme hedef dosyalarınızda uygun girişler ve çıkışlar belirtilmemişse, düzenleme yapmasanız bile çözümünüz derlenebilir. MSBuild'in uygun güncel denetimleri gerçekleştirebilmesi ve yeni bir derleme gerekip gerekmediğini belirleyebilmesi için hedeflere bir giriş ve çıkış listesi verilmelidir.

Canlı Birim Testi, kaynak dosyaların değiştiğini algılayan bir derleme başlatır. Çözümünüzün derlemesi kaynak dosyaları oluşturduğundan, Live Unit Testing sonsuz bir derleme döngüsüne girer. Bununla birlikte, Live Unit Testing ikinci derlemeyi başlattığında hedefin girişleri ve çıkışları denetlenirse (önceki derlemeden yeni oluşturulan kaynak dosyaları algıladıktan sonra), girişler ve çıkış denetimleri her şeyin güncel olduğunu gösterdiğinden derleme döngüsünden çıkar.

Düzenleyici simgeleri

Canlı Birim Testi, Çıkış penceresindeki iletilere göre testleri çalıştırıyor gibi görünse de neden düzenleyicide hiçbir simge görmüyorum?

Live Unit Testing'in üzerinde çalıştırdığı derlemeler herhangi bir nedenle izlenmiyorsa düzenleyicide simgeleri göremeyebilirsiniz. Örneğin, Live Unit Testing ayarlanan <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>projelerle uyumlu değildir. Bu durumda, derleme işleminizin bu ayarı kaldıracak veya Canlı Birim Testi'nin çalışması için olarak true değiştirilecek şekilde güncelleştirilmesi gerekir. 

Günlükleri yakalama

Hata raporlarını kaydetmek için daha ayrıntılı günlükler toplamak Nasıl yaparım??

Daha ayrıntılı günlükleri toplamak için birkaç şey yapabilirsiniz:

  • Araçlar>Seçenekleri>Canlı Birim Testi'ne gidin ve günlüğe kaydetme seçeneğini Ayrıntılı olarak değiştirin. Ayrıntılı günlük kaydı, Çıktı penceresinde daha ayrıntılı günlüklerin gösterilmesine neden olur.

  • Kullanıcı ortam değişkenini LiveUnitTesting_BuildLog MSBuild günlüğünü yakalamak için kullanmak istediğiniz dosyanın adına ayarlayın. Daha sonra Canlı Birim Testi derlemelerinden ayrıntılı MSBuild günlük iletileri bu dosyadan alınabilir.

  • LiveUnitTesting_TestPlatformLog Test Platformu günlüğünü yakalamak için kullanıcı ortam değişkenini olarak 1 ayarlayın. Daha sonra Canlı Birim Testi çalıştırmalarından ayrıntılı Test Platformu günlük iletileri adresinden [Solution Root]\.vs\[Solution Name]\log\[VisualStudio Process ID]alınabilir.

  • adlı VS_UTE_DIAGNOSTICS kullanıcı düzeyinde bir ortam değişkeni oluşturun ve bunu 1 (veya herhangi bir değer) olarak ayarlayın ve Visual Studio'yu yeniden başlatın. Artık Visual Studio'nun Çıkış - Testler sekmesinde çok fazla günlük görmeniz gerekir.

Çalışma alanı klasörü

Çalışma alanı klasörünün altındaki dosyaları düzenleyebilir miyim?

Hayır, çalışma alanı klasörünün derleme ve test dizinleri altındaki dosyaları açmamalı veya düzenlememelisiniz. Live Unit Testing, depo kökü ve çalışma alanı kökü arasında eşitlenmiş durumda tutmak için src klasöründeki tüm dosyaları yönetmelidir.

Geliştirme sürücüleri

Canlı birim testi, varsayılan çalışma alanı kökü için Dev Drive'a destek oluyor mu?

Evet, ancak etkinleştirildiğinden emin olmanız gerekir. Dev Drive kullanıyorsanız, öngörülen dosya sistemi (ProjFS) filtresinin etkinleştirildiğinden emin olun. Örneğin, aşağıdaki komut ProjFS ve Windows Defender'ı etkinleştirir:

fsutil devdrv setfiltersallowed PrjFlt, WdFilter

Ayrıca bkz.