Microsoft Fakes ile test altındaki kodu yalıtma

Kod yalıtımı, 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şime giren bölümlerinin stub'lar veya shim'lerle değiştirilmesiyle sağlanır. 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. Buna ek olarak, Microsoft Fakes’in sunduğu stub ve shim’lerin kullanımı, uygulamanızın diğer bölümleri henüz çalışmasa bile kodunuzu test etmenizi sağlar.

Requirements

Note

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

Kod Yalıtımında Microsoft Sahtelerinin Rolü

Microsoft Fakes, stubs ve shims olmak üzere iki mekanizma sunarak kod yalıtımında önemli bir rol oynar.

  • Stub'lar: Bunlar, bir sınıfın yerine aynı arabirimi uygulayan küçük bir alternatif kullanmak 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.

  • Shims: Bunlar, çalışma zamanında uygulamanızın derlenmiş kodunu değiştirmek için kullanılır. Uygulama, belirtilen yöntemi çağırmak yerine testinizin sağladığı shim kodunu çalıştırır. Shim'ler, .NET derlemeleri gibi değiştiremediğiniz derlemelere yapılan çağrıların yerine geçebilir.

Genellikle, Visual Studio çözümünüz içindeki çağrılar için stublar, başvurulan diğer derlemelere yönelik çağrılar için ise shimler 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 harici derlemeler çoğu zaman ayrı arabirim tanımlarıyla birlikte gelmez; bu nedenle bunun yerine shim'ler kullanılır.

Fakes'ın diğer bileşenleri değiştirdiğini gösteren diyagram.

Stub’ların Ne Zaman Kullanılması Gerektiğine İlişkin Öneriler

Stub'lar, genellikle Visual Studio çözümünüz içindeki çağrılarda kullanılır; çünkü stub kullanımının gerektirdiği şekilde arabirimler tanımlayarak bileşenler arasındaki bağımlılıkları azaltmak iyi bir uygulamadır. Ancak, System.dll gibi dış derlemeler genellikle ayrı arabirim tanımlarıyla sağlanmaz; bu gibi durumlarda bunun yerine shim'ler 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’da bulunan arabirim tanımlarından saplama türleri oluşturabilir, ardından testinizde gerçek bileşeni saplama ile değiştirebilirsiniz.

Dolguların Ne Zaman Kullanılacağına İlişkin Öneriler

Stub'lar, Visual Studio çözümünüz içindeki çağrılar için kullanılırken, shim'ler genellikle başvurulan diğer derlemelere yapılan çağrılar için kullanılır. Bunun nedeni, System.dll gibi harici derlemelerin genellikle ayrı arabirim tanımlarıyla sağlanmamasıdır; bu nedenle bunun yerine shim'ler kullanılmalıdır.

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

Performans: Shim'ler, kodunuzu çalışma zamanında yeniden yazdıkları için daha yavaş çalışır. Stub'lar bu performans ek yüküne sahip değildir ve sanal metotların çalışabildiği kadar hızlıdır.

Statik yöntemler, mühürlü türler: Arabirimleri uygulamak için yalnızca stub'ları kullanabilirsiniz. Bu nedenle stub türleri, statik yöntemler, sanal olmayan yöntemler, mühürlü sanal yöntemler, mühürlü türlerdeki yöntemler vb. için kullanılamaz.

İç türler: Hem taslaklar hem de sarmalayıcılar, InternalsVisibleToAttribute derleme özniteliği kullanılarak erişilebilir hâle getirilen iç türlerle kullanılabilir.

Özel yöntemler: Shim'ler, yöntem imzasındaki tüm türler görünürse özel yöntemlere yapılan çağrıların yerine geçebilir. Stub'lar yalnızca görünür metotların yerini alabilir.

Arabirimler ve soyut yöntemler: Taslaklar, testlerde kullanılabilecek arabirimler ve soyut yöntemler için uygulamalar sunar. Shims, yöntem gövdeleri olmadığından arayüzleri ve soyut yöntemleri enstrümante edemez.


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

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

.NET Core'a 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 bulunur (örneğin, System.DateTimeSystem/mscorlib .NET Framework'te ve System.Runtime .NET Core ve .NET 5.0) içinde bulunur ve bu senaryolarda sahte derlemeyi 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şturma sürecinde yapılan gerekli değişikliklerden kaynaklanmaktadır ve yok sayılabilir. Bu, assembly başvurusunu proje dosyasından kaldırarak önlenebilir, çünkü artık derleme sırasında bunları otomatik olarak ekliyoruz.

Microsoft Fakes testleri çalıştırma

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

Microsoft Fakes kullanan .NET Core ve .NET 5+ projelerinde vstest görevi ile dağıtılmış test için Visual Studio 2019 Update 9 Preview 20201020-06 ve sonraki sürümleri gerekir.

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

.NET Framework’ü hedefleyen eski projelerde Microsoft Fakes (SDK stili olmayan)

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

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

  • Microsoft Fakes derleme oluşturması, Visual Studio Enterprise 2019 Güncelleştirme 6'da önizlemeye sunulmuştur ve Güncelleştirme 8'de varsayılan olarak etkindir.
  • .NET Framework'ü hedefleyen projeler için Microsoft Fakes testleri, mevcut tüm Microsoft.TestPlatform NuGet paketleriyle çalıştırılabilir.
  • .NET Core ve .NET 5.0 veya sonraki sürümleri hedefleyen projeler için Microsoft Fakes testleri Microsoft ile çalıştırılabilir. 16.9.0-preview-20210106-01 ve üzeri sürümlere sahip TestPlatform NuGet paketleri.
  • Kod kapsamı, Microsoft Fakes kullanan .NET Framework hedefleyen test projeleri için Visual Studio Enterprise 2015 ve sonraki sürümlerde desteklenir.
  • Microsoft Fakes kullanarak .NET Core ve .NET 5.0 veya sonraki sürümleri hedefleyen test projeleri için kod kapsamı desteği, Visual Studio 2019 güncelleştirme 9 ve üzeri sürümlerde kullanılabilir.