Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede Fakes kod oluşturma ve derlemedeki seçenekler ve sorunlar ele alınmaktadır ve Fakes tarafından oluşturulan türler, üyeler ve parametreler için adlandırma kuralları açıklanmaktadır.
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.
Kod oluşturma ve derleme
Saplamaların kod oluşturmayı yapılandırma
Saplama türlerinin oluşturulması, .fakes dosya uzantısına sahip bir XML dosyasında yapılandırılır. Fakes çerçevesi, özel MSBuild görevleri aracılığıyla derleme işlemiyle tümleşir ve derleme zamanında bu dosyaları algılar. Fakes kod oluşturucu saplama türlerini bir derlemede derler ve başvuruyu projeye ekler.
Aşağıdaki örnekte FileSystem.dll tanımlanan saplama türleri gösterilmektedir:
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="FileSystem"/>
</Fakes>
Tür filtreleme
Hangi türlerin saplanması gerektiğini kısıtlamak için .fakes dosyasında filtreler ayarlanabilir. Seçili türlerin listesini oluşturmak için StubGeneration öğesinin altına sınırsız sayıda Clear, Add, Remove öğesi ekleyebilirsiniz.
Örneğin, aşağıdaki .fakes dosyası Sistem ve System.IO ad alanları altındaki türler için saplamalar oluşturur, ancak Sistem'de "Tanıtıcı" içeren herhangi bir türü dışlar:
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" />
<!-- user code -->
<StubGeneration>
<Clear />
<Add Namespace="System!" />
<Add Namespace="System.IO!"/>
<Remove TypeName="Handle" />
</StubGeneration>
<!-- /user code -->
</Fakes>
Filtre dizeleri, eşleştirmenin nasıl yapılması gerektiğini tanımlamak için basit bir dil bilgisi kullanır:
Filtreler varsayılan olarak büyük/küçük harfe duyarlı değildir; filtreler bir alt dize eşleştirmesi gerçekleştirir:
el
"hello" ile eşleşirFiltrenin sonuna eklemek
!
, büyük/küçük harfe duyarlı hassas bir eşleşme olmasını sağlar:el!
"hello" ile eşleşmiyorhello!
"hello" ile eşleşirFiltrenin sonuna eklemek
*
, dizenin ön eki ile eşleşmesini sağlar:el*
"hello" ile eşleşmiyorhe*
"hello" ile eşleşirNoktalı virgülle ayrılmış bir listedeki birden çok filtre, ayrıştırma olarak birleştirilir:
el;wo
"hello" ve "world" ile eşleşir
Saplama beton sınıfları ve sanal yöntemler
Varsayılan olarak, saplama türleri tüm korumalı olmayan sınıflar için oluşturulur. Saplama türlerini .fakes yapılandırma dosyası aracılığıyla sınıfları soyutlamayla kısıtlamak mümkündür:
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" />
<!-- user code -->
<StubGeneration>
<Types>
<Clear />
<Add AbstractClasses="true"/>
</Types>
</StubGeneration>
<!-- /user code -->
</Fakes>
İç türler
Fakes kod oluşturucu oluşturulan Fakes derlemesi için görünür türler için dolgu türleri ve saplama türleri oluşturur. Çakışan derlemenin iç türlerini Fakes ve test derlemeniz için görünür hale getirmek için, oluşturulan Fakes derlemesine ve test derlemesine görünürlük sağlayan dolgulu derleme koduna öznitelikler ekleyin InternalsVisibleToAttribute . Bir örnek aşağıda verilmiştir:
// FileSystem\AssemblyInfo.cs
[assembly: InternalsVisibleTo("FileSystem.Fakes")]
[assembly: InternalsVisibleTo("FileSystem.Tests")]
Kesin adlandırılmış derlemelerdeki iç türler
Dolgulu derleme kesin olarak adlandırılmışsa ve derlemenin iç türlerine erişmek istiyorsanız:
Hem test derlemeniz hem de Fakes derlemesi kesin olarak adlandırılmalıdır.
Birleştirme derlemelerindeki InternalsVisibleToAttribute özniteliklerine test ve Fakes derlemesinin ortak anahtarlarını ekleyin. Dolgulanmış derleme tam olarak adlandırıldığında, dolgulanmış derleme kodundaki örnek özniteliklerin nasıl görüneceği aşağıda verilmiştir:
// FileSystem\AssemblyInfo.cs [assembly: InternalsVisibleTo("FileSystem.Fakes", PublicKey=<Fakes_assembly_public_key>)] [assembly: InternalsVisibleTo("FileSystem.Tests", PublicKey=<Test_assembly_public_key>)]
Dolgulu derleme kesin olarak adlandırılmışsa, Fakes çerçevesi oluşturulan Fakes derlemesini otomatik olarak güçlü bir şekilde imzalar. Test derlemesini güçlü bir şekilde imzalamanız gerekir. Bkz. Tanımlayıcı Adlandırılmış derlemeler.
Fakes çerçevesi, oluşturulan tüm derlemeleri imzalamak için aynı anahtarı kullanır, böylece bu kod parçacığını bir başlangıç noktası olarak kullanarak sahte derlemenin InternalsVisibleTo özniteliğini dolgulu derleme kodunuza ekleyebilirsiniz.
[assembly: InternalsVisibleTo("FileSystem.Fakes, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc")]
.fakes dosyasının öğesinde öznitelik değeriCompilation
Fakes
\olarak KeyFile
alternatif anahtarı içeren .snk dosyasının tam yolunu belirterek Fakes derlemesi için farklı bir ortak anahtar belirtebilirsiniz. Örneğin:
<-- FileSystem.Fakes.fakes -->
<Fakes ...>
<Compilation KeyFile="full_path_to_the_alternate_snk_file" />
</Fakes>
Ardından alternatif .snk dosyasının ortak anahtarını, dolgulu derleme kodundaki Fakes derlemesi için InternalVisibleTo özniteliğinin ikinci parametresi olarak kullanmanız gerekir:
// FileSystem\AssemblyInfo.cs
[assembly: InternalsVisibleTo("FileSystem.Fakes",
PublicKey=<Alternate_public_key>)]
[assembly: InternalsVisibleTo("FileSystem.Tests",
PublicKey=<Test_assembly_public_key>)]
Yukarıdaki örnekte, ve Test_assembly_public_key
değerleri Alternate_public_key
aynı olabilir.
Derleme sürelerini iyileştirme
Fakes derlemelerinin derlenmesi, derleme sürenizi önemli ölçüde artırabilir. Ayrı bir merkezi projede .NET Sistem derlemeleri ve üçüncü taraf derlemeler için Fakes derlemeleri oluşturarak derleme süresini en aza indirebilirsiniz. Bu tür derlemeler makinenizde nadiren değiştiğinden, oluşturulan Fakes derlemelerini diğer projelerde yeniden kullanabilirsiniz.
Birim testi projelerinizden, proje klasöründeki FakesAssemblies altına yerleştirilen derlenmiş Fakes derlemelerine bir başvuru ekleyin.
Test projelerinizle eşleşen .NET çalışma zamanı sürümüyle yeni bir Sınıf Kitaplığı oluşturun. Buna Fakes.Prebuild diyelim. class1.cs dosyasını projeden kaldırın, gerekli değildir.
Fakes'a ihtiyacınız olan tüm Sistem ve üçüncü taraf derlemelerine başvuru ekleyin.
Derlemelerin ve derlemelerin her biri için bir .fakes dosyası ekleyin.
Test projenizden
Fakes çalışma zamanı DLL'sine bir başvurunuz olduğundan emin olun:
%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PublicAssemblies\Microsoft.QualityTools.Testing.Fakes.dll
Fakes'ı oluşturduğunuz her derleme için, projenizin Fakes.Prebuild\FakesAssemblies klasörüne karşılık gelen DLL dosyasına bir başvuru ekleyin.
Derleme adı çakışmasını önleme
Ekip Derleme ortamında tüm derleme çıkışları tek bir dizinde birleştirilir. Birden çok proje Fakes kullanıyorsa, farklı sürümlerden Fakes derlemelerinin birbirini geçersiz kıldığını fark edebilir. Örneğin, TestProject1 .NET Framework 2.0'dan mscorlib.dll sahtedir ve TestProject2.NET Framework 4 için mscorlib.dll sahtedir ve her ikisi de bir mscorlib'e neden olur. Fakes.dll Fakes derlemesi.
Bu sorundan kaçınmak için Fakes, .fakes dosyalarını eklerken proje dışı başvurular için sürüm nitelikli Fakes derleme adlarını otomatik olarak oluşturmalıdır. Fakes derleme adını oluşturduğunuzda sürüm nitelikli Fakes derleme adı bir sürüm numarası ekler:
MyAssembly derlemesi ve 1.2.3.4 sürümü verildiğinde Fakes derleme adı MyAssembly.1.2.3.4.Fakes'tır.
.fakes içindeki Assembly öğesinin Version özniteliğini düzenleyerek bu sürümü değiştirebilir veya kaldırabilirsiniz:
attribute of the Assembly element in the .fakes:
<Fakes ...>
<Assembly Name="MyAssembly" Version="1.2.3.4" />
...
</Fakes>
Fakes adlandırma kuralları
Dolgu türü ve saplama türü adlandırma kuralları
Ad Alanları
. Fakes soneki ad alanına eklenir.
Örneğin,
System.Fakes
ad alanı Sistem ad alanı dolgu türlerini içerir.Global.Fakes boş ad alanının dolgu türünü içerir.
Tür adları
Dolgu türü adını oluşturmak için tür adına dolgu ön eki eklenir.
Örneğin, ShimExample Örnek türünün dolgu türüdür.
Saplama ön eki, saplama türü adını oluşturmak için tür adına eklenir.
Örneğin StubIExample, IExample türünün saplama türüdür.
Tür Bağımsız Değişkenleri ve İç İçe Yerleştirilmiş Tür Yapıları
Genel tür bağımsız değişkenleri kopyalanır.
Dolgu türleri için iç içe tür yapısı kopyalanır.
Dolgu temsilcisi özelliği veya saplama temsilcisi alan adlandırma kuralları
Boş bir addan başlayarak alan adlandırma için temel kurallar :
Yöntem adı eklenir.
Yöntem adı açık bir arabirim uygulamasıysa, noktalar kaldırılır.
Yöntem genelse,
Of
n eklenir; burada n , genel yöntem bağımsız değişkenlerinin sayısıdır.Özellik alıcısı veya ayarlayıcıları gibi özel yöntem adları aşağıdaki tabloda açıklandığı gibi ele alınır:
Yöntem... | Örnek | Yöntem adı eklenmiştir |
---|---|---|
Oluşturucu | .ctor |
Constructor |
Statik oluşturucu | .cctor |
StaticConstructor |
"_" ile ayrılmış iki bölümden oluşan yöntem adına sahip bir erişimci (özellik alıcıları gibi) | kind_name (yaygın durum, ancak ECMA tarafından zorlanmaz) | NameKind, her iki parçanın da büyük harfle yazıldığı ve değiştirildiği yer |
Özelliğin alıcısı Prop |
PropGet |
|
Özelliğin ayarlayıcısı Prop |
PropSet |
|
Olay ekleyicisi | Add |
|
Olay kaldırıcı | Remove |
|
İki bölümden oluşan bir işleç | op_name |
NameOp |
Örneğin: + işleci | op_Add |
AddOp |
Dönüştürme işleci için dönüş türü eklenir. | T op_Implicit |
ImplicitOpT |
Not
- Dizin oluşturucuların alıcıları ve ayarlayıcıları özelliğine benzer şekilde değerlendirilir. Dizin oluşturucunun varsayılan adıdır
Item
. - Parametre türü adları dönüştürülür ve birleştirilir.
- Aşırı yükleme belirsizliği olmadığı sürece dönüş türü yoksayılır. Aşırı yükleme belirsizliği varsa, dönüş türü adın sonuna eklenir.
Parametre türü adlandırma kuralları
Verilen | Eklenen dize... |
---|---|
Bir türT |
T Ad alanı, iç içe yapı ve genel tikler bırakılır. |
Out parametresiout T |
TOut |
Ref parametresi ref T |
TRef |
Dizi türüT[] |
TArray |
Çok boyutlu dizi türü T[ , , ] |
T3 |
İşaretçi türüT* |
TPtr |
Genel bir türT<R1, ...> |
TOfR1 |
Türünde genel bir tür bağımsız değişkeni!i C<TType> |
Ti |
Yöntemin genel yöntem bağımsız değişkeni!!i M<MMethod> |
Mi |
İç içe bir türN.T |
N eklenir ve ardından T |
Özyinelemeli kurallar
Aşağıdaki kurallar özyinelemeli olarak uygulanır:
Fakes, Fakes derlemelerini oluşturmak için C# kullandığından, geçersiz bir C# belirteci üretecek tüm karakterler "_" (alt çizgi) olarak kaçış yapar.
Sonuçta elde edilen ad bildirim türünün herhangi bir üyesiyle çakıştırılırsa, 01'den başlayarak iki basamaklı bir sayaç eklenerek numaralandırma düzeni kullanılır.
Sürekli Tümleştirmede Microsoft Fakes'i Kullanma
Microsoft Fakes Derleme Oluşturma
Microsoft Fakes, yalnızca Visual Studio Enterprise'da kullanılabilen bir özelliktir. Bu nedenle Fakes Assemblies oluşturma işlemi, projenizi oluştururken Visual Studio Derleme Görevinin kullanılmasını zorunlu kılmaktadır.
Not
Alternatif bir strateji, Fakes Assemblies'inizi doğrudan Sürekli Tümleştirme (CI) sistemine denetlemeyi ve MSBuild Görevini kullanmayı içerir. Bu yaklaşımı tercih ederseniz, aşağıdaki kod parçacığında gösterildiği gibi test projenizde oluşturulan Fakes derlemesine bir derleme başvurusu eklediğinizden emin olmanız gerekir:
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<Reference Include="FakesAssemblies\System.Fakes.dll"/>
</ItemGroup>
</Project>
Bu projeler artık örtük olarak derleme başvuruları eklediğinden, bu başvuru özellikle SDK stili projeler (.NET Core, .NET 5+ ve .NET Framework) için el ile eklenmelidir. Bu yöntemi kullanmaya karar verirseniz, üst derleme değişikliklere uğradığında Fakes derlemesini güncelleştirdiğinizden emin olun.