Kod oluşturma, derleme ve Microsoft Fakes adlandırma kuralları
Bu konu Fakes kod oluşturma ve derleme seçeneklerini ve sorunlarını ele alır ve üretilen Fakes türleri, üyeler ve parametrelerini adlandırma kurallarını açıklar.
Gereksinimler
- Visual Studio Ultimate
Bu konuda
Buradan bilgi edinebilirsiniz:
Code generation and compilation
Kod oluşturma ve derleme
Koçanların kod oluşturma yapılandırması
Koçan türler oluşturulmasını .fakes dosya uzantısına sahip bir XML dosyasında yapılandırılır.Fakes framework MSBuild görevi özel yapım sürecinde birleştirir ve bu dosyaları derleme sırasında algılar.Fakes Kod Oluşturucusu bir derleme içine koçan türleri derler ve projeye başvuruyu ekler.
Aşağıdaki örnekte, FileSystem.dll içinde tanımlanan koçan türleri gösterilmektedir:
<Fakes xmlns="https://schemas.microsoft.com/fakes/2011/">
<Assembly Name="FileSystem"/>
</Fakes>
Tür Filtreleme
Filtreler, koçan heline getirilmesi gereken türleri sınırlamak için .fakes dosyasında ayarlanabilir.StubGeneration öğesinin altındaki Temizle, Ekle, Kaldır öğelerini seçili türlerinin listesini oluşturmak için sınırsız sayıda ekleyebilirsiniz.
Örneğin, bu .fakes dosya türleri altında sistem ve System.IO ad alanları için yer tutucular oluşturur, ama sisteminde "İşleme" içeren her türlü çıkarır:
<Fakes xmlns="https://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şmenin nasıl yapılması gerektiğini belirlemek için basit bir dil bilgisi kullanır:
Filtreler varsayılan olarak büyük küçük harf duyarlıdır; filtreler alt dize karşılaştırması uygular:
el "hello" ile eşleşir
Filtre sonuna ! ekleme kesin bir büyük küçük harf duyarlı eşleşme yapar:
el! "hello" ile eşleşmez.
hello! "hello" ile eşleşir
Filtre sonuna * ekleme eşleşmeyi dizenin önek kısmına kadar yapacaktır:
el* "hello" ile eşleşmez.
he* "hello" ile eşleşir
Noktalı virgülle ayrılmış bir listede birden çok filtre ayırım yaparak birleştirilebilir.
el;wo"Merhaba" ve "dünya" ile eşleşir.
Somut sınıflar ve sanal yöntemleri koçan yapma
Varsayılan olarak, koçan türleri korumalı olmayan tüm sınıflar için oluşturulur..Fakes yapılandırma dosyasıyla sınıflarının soyut koçan türlerini kısıtlamak mümkündür:
<Fakes xmlns="https://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" />
<!-- user code -->
<StubGeneration>
<Types>
<Clear />
<Add AbstractClasses="true"/>
</Types>
</StubGeneration>
<!-- /user code -->
</Fakes>
Tanımlayıcı ad imzalama
Shimmed derleme güçlü imzalandığında Fakes framework otomatik olarak oluşturulan Fakes derlemeleri imzalar.Derlemeyi imzalamada kullanılacak farklı bir anahtar kullanıcı tarafından belirtmediği sürece Fakes framework her zaman aynı anahtarı kullanır..fakes dosyasında farklı bir anahtar belirtilebilir.
<Fakes ...>
<Compilation KeyFile="path to the key file" />
</Fakes>
Dahili türler
Fakes kod oluşturucusu üretilen fakes derlemeye görülebilen shim/dolgu türlerini ve koçan türleri oluşturacaktır.Dahili türleri görünür hale getirmek için oluşturulan Fakes derleme için görünürlük sağlayan shimmed derlemelere InternalsVisibleTo özniteliği ekleyebilirsiniz.
[assembly: InternalsVisibleTo("FileSystem.Fakes")]
Eğer shimmed derleme güçlü imzalarsa Fakes framework otomatik olarak oluşturulan Fakes derlemeleri imzalar.Bu durumda, InternalsVisibleToAttribute özniteliği ortak anahtarın yanı sıra derleme adına da başvuru ihtiyaç duyar.Fakes framework her zaman derlemeyi imzalamak için aynı anahtarı kullanır, böylece bu küçük parçayı projenize InternalsVisibleTo özniteliği eklemek için bir başlangıç noktası olarak kullanırsınız.
[assembly: InternalsVisibleTo("FileSystem.Fakes, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc")]
Derleme zamanlarını optimize etme
Fakes derlemelerinin derlemesi yapım sürenizi önemli ölçüde artırabilir.Ayrı merkezi bir proje içinde .Net System derlemeleri ve üçüncü parti derlemeler için Fakes derlemeler oluşturarak derleme zamanını en aza indirebilirsiniz.Bu tür derlemeler makinenizde nadiren değiştiği için oluşturulan Fakes derlemeleri diğer projelerde yeniden kullanabilirsiniz.
Birim test projelerinizden proje klasöründeki FakesAssemblies altında yerleştirilen derlenmiş Fakes derlemelerden açıkça başvuru alabilirsiniz.
Test projelerinizle eşleşen .Net çalışma zamanı sürümünü ile yeni bir Sınıf Kitaplığı oluşturun.Fakes.Prebuild diye çağıralım.Class1.cs dosyasını projeden kaldırın, gerekli olmayan.
Fakes için gereken tüm sistem ve üçüncü parti derlemelere başvuru ekleyin.
Her derleme ve yapılandırma için bir .fakes dosyası ekleyin.
Test projenizden bir derleme başvurusu ekleyin ve Fakes.Prebuild\FakesAssemblies klasörüne gidin ve uygun derlemeyi bulun.
Derleme adı çarpışmasından kaçının
Bir Takım Derleme ortamında, tüm yapı çıkışları tek bir dizin içinde birleştirilir.Fakes kullanan birden fazla proje söz konusu olduğunda, farklı sürümden Fakes derlemeler birbirini geçersiz kılma meydana getirebilir.Örneğin, .Net Framework 2.0 mscorlib.dll TestProject1 fakes ve .Net Framework 4 mscorlib.dll TestProject2 fakes her ikisi de bir mscorlib.fakes.Fakes.dll Fakes derlemesi elde eder.
Bu sorunu önlemek için Fakes, .fakes dosyaları eklerken proje-olmayan başvurular için otomatik olarak sürüm nitelikli Fakes derlemesi oluşturması gerekir.Bir sürüm nitelikli Fakes derleme adı Fakes derleme adı oluştururken bir sürüm numarası gömer:
Verilen bir derleme MyAssembly ve sürüm ise Fakes derleme adı MyAssembly.1.2.3.4.Fakes'dir.
.fakes içindeki Derleme öğesinin Version özniteliğini düzenleyerek bu sürümü kaldırın ya da değiştirin:
attribute of the Assembly element in the .fakes:
<Fakes ...>
<Assembly Name="MyAssembly" Version="1.2.3.4" />
...
</Fakes>
Fakes adlandırma kuralları
Dolgu ve koçan türleri adlandırma kuralları
Ad Uzayları
.Fakes sonekini ad alanına eklenir.
Örneğin, System.Fakes ad alanı System ad alanının shim/dolgu türlerini içerir.
Global.Fakes boş ad alanını dolgu türünü içerir.
Tür adları
Dolgu/Shim öneki dolgu türü adı yapılandırmak için tür adına eklenir.
Örneğin, ShimExample Example türünün shim türüdür.
Stub öneki stub türü adı yapılandırmak için tür adına eklenir.
Örneğin, StubIExample IExample türünün stub türüdür.
Tür Argümanları ve İç İçe Tür Yapıları
Genel/Generic tür argümanları kopyalanır.
İç içe tür yapıları shim türleri için kopyalanır.
Shim temsilci özelliği veya stub temsilci alanı adlandırma kuralları
Temel kurallar adlandırma alanı için, boş bir isimden başlama:
Yöntem adı eklenir.
Eğer yöntem adı açık bir arabirim uygulaması ise noktalar kaldırılır.
Eğer yöntem genelse, Ofn eklenir, n 'in generic yöntem argümanlarının sayısı olan yerde.
Özel yöntem adları gibi özellik alıcı veya ayarlayıcılar aşağıdaki tabloda açıklandığı gibi davranırlar.
Eğer metot... ise |
Örnek |
Yöntem adı eklenmiş |
---|---|---|
Bir Oluşturucu |
.ctor |
Constructor |
Bir statik yapıcı |
.cctor |
StaticConstructor |
Bir erişimci yöntemi ile iki kısımdan adı "_" (örneğin, özellik alıcıları) tarafından ayrılmış |
kind_name (ortak büyük/küçük harf, ancak ECMA tarafından zorlanan değil) |
NameKind, her iki parçası da büyük harf haline gelmek ve takaslanmak zorunda olan yerde |
Özelliğin alıcısı Prop |
PropGet |
|
Özelliğin ayarlayıcısı Prop |
PropSet |
|
Olay ekleyici |
Add |
|
Olay kaldırıcısı |
Remove |
|
Bir işleç iki bölümden oluşur |
op_name |
NameOp |
Örneğin: + işleci |
op_Add |
AddOp |
Bir dönüştürme işleciiçin, dönüş türü eklenir. |
T op_Implicit |
ImplicitOpT |
Notlar
Dizin oluşturucuların alıcıları ve ayarlayıcıları özelliğe benzer şekilde davranır.Bir dizin oluşturucu için varsayılan ad Item.
Parametre türü adları dönüştürülür ve birleştirilir.
Dönüş türü aşırı yükleme belirsizliği olmadıkça göz ardı edilir.Eğer bu durumsa, 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 iptal edilir. |
Bir dışarı parametresiout T |
TOut |
Bir ref parametresiref T |
TRef |
Bir dizi/array türüT[] |
TArray |
Bir çok boyutlu dizi türü T[ , , ] |
T3 |
Bir pointer/işaretçi türü T* |
TPtr |
Bir genel/generic türT<R1, …> |
TOfR1 |
Bir genel tür argümanı!iC<TType> türünün |
Ti |
Bir genel metot argümanı!!iM<MMethod> metodunun |
Mi |
Bir iç içe türN.T |
N eklenir, daha sonra T |
Özyinelemeli kurallar
Aşağıdaki kurallar özyinelemeli olarak uygulanır:
Fakes kullandığı için C# Fakes derlemeler oluşturmak için geçersiz bir C# belirteç üretir herhangi bir karakter önce "_" (alt çizgi).
Eğer son halini alan ad tanıtılan türün her hangi bir üyesiyle çarpışırsa, 01'den başlayan iki basamaklı sayılar ekleyen bir sayaç kullanarak bir numaralandırma şeması kullanılır.
Dış kaynaklar
Kılavuz
Visual Studio 2012 – bölüm 2 ile sürekli teslimat için sınama: birim testi: iç sınama