Microsoft Fakes ile test edilen kodu yalıtma

Kod yalıtımı, genellikle test ettiğiniz kodun uygulamanın geri kalanından ayrıldığı Microsoft Fakes gibi araçlarla uygulanan bir test stratejisidir. Bu ayrım, uygulamanın test edilen kodla etkileşim kuran bölümlerini saplamalar veya dolgularla değiştirerek elde edilir. Bunlar, testleriniz tarafından denetlenen ve değiştirdikleri gerçek parçaların davranışını simüle eden küçük kod parçalarıdır.

Bu yaklaşımın avantajı, kodun belirli işlevselliğini yalıtarak test etmeye odaklanmanıza olanak sağlamasıdır. Bir test başarısız olursa, nedeninin başka bir yerde değil yalıtılmış kodda olduğunu bilirsiniz. Ayrıca, Microsoft Fakes tarafından sağlanan saplama ve dolgu kullanımı, uygulamanızın diğer bölümleri henüz çalışmasa bile kodunuzu test etmenizi sağlar.

Gereksinimler

  • Visual Studio Enterprise
  • .NET Framework projesi
  • Visual Studio 2019 Güncelleştirme 6'da ön izlemesi yapılan .NET Core, .NET 5.0 veya üzeri ve SDK stili proje desteği, Güncelleştirme 8'de varsayılan olarak etkindir. Daha fazla bilgi için bkz . .NET Core ve SDK stili projeler için Microsoft Fakes.

Not

Visual Studio ile profil oluşturma, Microsoft Fakes kullanan testlerde kullanılamaz.

Kod Yalıtımında Microsoft Fakes'in Rolü

Microsoft Fakes, saplamalar ve dolgular olmak üzere iki mekanizma sağlayarak kod yalıtımında önemli bir rol oynar.

  • Saptamalar: Bunlar, sınıfı aynı arabirimi uygulayan küçük bir ikame ile değiştirmek için kullanılır. Bu, uygulamanızın her bileşenin diğer bileşenlere değil yalnızca arabirimlere bağlı olacak şekilde tasarlanması gerekir.

  • Dolgular: Bunlar çalışma zamanında uygulamanızın derlenmiş kodunu değiştirmek için kullanılır. Uygulama, belirtilen bir yöntem çağrısı yapmak yerine testinizin sağladığı dolgu kodunu çalıştırır. Dolgular, .NET derlemeleri gibi değiştiremezseniz derlemelere yapılan çağrıları değiştirebilir.

Saptamalar genellikle Visual Studio çözümünüzdeki çağrılar için kullanılır ve başvuruda olunan diğer derlemelere yönelik çağrılar için dolgular kullanılır. Bunun nedeni, çözümünüzde, saptamanın gerektirdiği şekilde arabirimleri tanımlayarak bileşenleri ayırmanın iyi bir uygulama olmasıdır. Ancak dış derlemeler genellikle ayrı arabirim tanımlarıyla birlikte gelmez, bu nedenle dolgular kullanılır.

Diagram that show Fakes replacing other components.

Saplamaların Ne Zaman Kullanılacağına Öneriler

Saptamalar genellikle Visual Studio çözümünüzdeki çağrılar için kullanılır çünkü saptamanın gerektirdiği şekilde arabirimleri tanımlayarak bileşenleri ayırmak iyi bir uygulamadır. Ancak, System.dll gibi dış derlemeler genellikle ayrı arabirim tanımları ile sağlanmamıştır, bu nedenle bu durumlarda dolgular kullanılır.

Saplamaları kullanmak, uygulamanızı farklı bileşenlerin birbirine değil yalnızca arabirim tanımlarına bağımlı olacak şekilde tasarlamayı içerir. Bu ayırma, uygulamayı daha sağlam ve esnek hale getirir ve test amacıyla arabirimlerin uygulamalarını saptamak için test altındaki bileşeni bağlamanıza olanak tanır.

Uygulamada, Visual Studio'daki arabirim tanımlarından saplama türleri oluşturabilir ve ardından gerçek bileşeni testinizde saplamayla değiştirebilirsiniz.

Dolguların Ne Zaman Kullanılacağına Öneriler

Saplamalar Visual Studio çözümünüzdeki çağrılar için kullanılırken dolgular genellikle başvuruda olunan diğer derlemelere yapılan çağrılar için kullanılır. Bunun nedeni System.dll gibi dış derlemelerin genellikle ayrı arabirim tanımlarıyla sağlanmadığı için dolguların kullanılması gerekir.

Ancak dolgu kullanırken dikkate alınması gereken bazı faktörler vardır:

Performans: Dolgular çalışma zamanında kodunuzu yeniden yazdıkları için daha yavaş çalışır. Saptamalar bu performans ek yüküne sahip değildir ve sanal yöntemlerin çalıştırabileceği kadar hızlıdır.

Statik yöntemler, korumalı türler: Yalnızca arabirimleri uygulamak için saplamaları kullanabilirsiniz. Bu nedenle saplama türleri statik yöntemler, sanal olmayan yöntemler, korumalı sanal yöntemler, korumalı türlerdeki yöntemler vb. için kullanılamaz.

İç türler: Hem saplamalar hem de dolgular, derleme özniteliği InternalsVisibleToAttributekullanılarak erişilebilir hale gelen iç türlerle kullanılabilir.

Özel yöntemler: Dolgular, yöntem imzanızdaki tüm türler görünür durumdaysa özel yöntemlere yapılan çağrıları değiştirebilir. Saptamalar yalnızca görünür yöntemlerin yerini alabilir.

Arabirimler ve soyut yöntemler: Saplamalar, testte kullanılabilecek arabirimlerin ve soyut yöntemlerin uygulamalarını sağlar. Dolgular, yöntem gövdeleri olmadığından arabirimleri ve soyut yöntemleri izleyemez.


.NET Framework'te Microsoft Fakes'ı SDK Stili Projelere Geçirme

Microsoft Fakes kullanan .NET Framework test projelerinizi SDK stilinde .NET Framework, .NET Core veya .NET 5+ projelerine geçirme.

.NET Core veya .NET 5.0'a geçiş yapmak için Microsoft Fakes için ayarlanmış .NET Framework'unuzda en az değişiklik yapmanız gerekir. Dikkate almanız gereken durumlar şunlardır:

  • Özel proje şablonu kullanıyorsanız, bunun SDK stilinde olduğundan ve uyumlu bir hedef çerçeve için derlediğinden emin olmanız gerekir.

  • Bazı türler .NET Framework ve .NET Core/.NET 5.0'daki farklı derlemelerde (örneğin, System.DateTime .NET Framework'temscorlibSystem/ve .NET Core ve System.Runtime .NET 5.0'da bulunur) bulunur ve bu senaryolarda derlemenin sahte olmasını değiştirmeniz gerekir.

  • Sahte derlemeye ve test projesine yönelik bir derleme başvurunuz varsa, aşağıdakine benzer bir eksik başvuru hakkında derleme uyarısı görebilirsiniz:

    (ResolveAssemblyReferences target) ->
    warning MSB3245: Could not resolve this reference. Could not locate the assembly "AssemblyName.Fakes". Check to make sure the assembly exists on disk.
    If this reference is required by your code, you may get compilation errors.
    

    Bu uyarı, Fakes oluşturmada yapılan gerekli değişikliklerden dolayıdır ve yoksayılabilir. Derleme başvurusu proje dosyasından kaldırılarak önlenebilir, çünkü artık derleme sırasında bunları örtük olarak ekleyeceğiz.

Microsoft Fakes testleri çalıştırma

Microsoft Fakes derlemeleri yapılandırılmış FakesAssemblies dizinde (varsayılan değer$(ProjectDir)FakesAssemblies) bulunduğu sürece, vstest görevini kullanarak testleri çalıştırabilirsiniz.

Microsoft Fakes kullanan vstest görevi .NET Core ve .NET 5+ projeleri ile dağıtılmış test, Visual Studio 2019 Güncelleştirme 9 Önizlemesi 20201020-06 ve üzerini gerektirir.

Farklı .NET ve Visual Studio Sürümlerinde Microsoft Fakes için Uyumluluk ve Destek

.NET Framework'e (SDK olmayan stil) yönelik eski projelerde Microsoft Fakes.

  • Microsoft Fakes derleme oluşturma, Visual Studio Enterprise 2015 ve sonraki sürümlerde desteklenir.
  • Microsoft Fakes testleri tüm kullanılabilir Microsoft.TestPlatform NuGet paketleriyle çalıştırılabilir.
  • Kod kapsamı, Visual Studio Enterprise 2015 ve sonraki sürümlerde Microsoft Fakes kullanan test projeleri için desteklenir.

SDK stilinde .NET Framework, .NET Core ve .NET 5.0 veya üzeri projelerde Microsoft Fakes

  • Microsoft Fakes derleme oluşturma, Visual Studio Enterprise 2019 Güncelleştirme 6'da önizlemededir ve Güncelleştirme 8'de varsayılan olarak etkindir.
  • .NET Framework'u hedefleyen projeler için Microsoft Fakes testleri tüm kullanılabilir Microsoft.TestPlatform NuGet paketleriyle çalıştırılabilir.
  • .NET Core ve .NET 5.0 veya üzerini hedefleyen projeler için Microsoft Fakes testleri, 16.9.0-preview-20210106-01 ve üzeri sürümlere sahip Microsoft.TestPlatform NuGet paketleriyle çalıştırılabilir.
  • Visual Studio Enterprise sürüm 2015 ve üzeri sürümlerde Microsoft Fakes kullanılarak .NET Framework'ün hedeflendiği test projelerinde kod kapsamı desteklenir.
  • Microsoft Fakes kullanarak .NET Core ve .NET 5.0 veya üzerini hedefleyen test projeleri için kod kapsamı desteği Visual Studio 2019 güncelleştirme 9 ve üzeri sürümlerde kullanılabilir.