Microsoft Fakes의 코드 생성, 컴파일 및 명명 규칙
이 항목에서는 Fake 코드 생성 및 컴파일 옵션 및 문제에 설명 하 고 생성 Fake 형식, 멤버 및 매개 변수에 대 한 명명 규칙에 설명 합니다.
요구 사항
- Visual Studio Ultimate
항목 내용
다음은 무엇을 배울 수 있습니다.
Code generation and compilation
코드 생성 및 컴파일
스텁 코드 생성 구성
스텁 형식이 생성.fakes 파일 확장명을 가진 XML 파일에 구성 되어 있습니다.Fake 프레임 워크 빌드 프로세스 사용자 지정 MSBuild 작업을 통해 통합 및 빌드 시에 이러한 파일을 검색 합니다.Fake 코드 생성기 스텁 형식이 어셈블리로 컴파일합니다 및 프로젝트에 대 한 참조를 추가 합니다.
다음 예제에서는 스텁 형식이 Filesystem.dll에서 정의 보여 줍니다.
<Fakes xmlns="https://schemas.microsoft.com/fakes/2011/">
<Assembly Name="FileSystem"/>
</Fakes>
형식 필터링
제한 종류 스텁 해제 된 수 해야 하는.fakes 파일에 필터를 설정할 수 있습니다.선택한 형식의 목록을 작성 하 여 StubGeneration 요소 아래의 요소를 제거, 추가, 지우기는 바인딩되지 않은 번호를 추가할 수 있습니다.
예를 들어,.fakes 파일 시스템 및 System.IO 네임 스페이스에서 형식에 대 한 스텁이 생성 하지만 시스템에 "처리"를 포함 하는 형식 제외:
<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>
필터 문자열 간단한 문법 검사를 사용 하는 일치 하는 방법을 수행 해야 정의 합니다.
필터는 기본적으로 대/소문자 구분입니다. 부분 문자열이 일치 하는 필터를 수행 하십시오.
el"hello"를 찾습니다.
추가 ! 필터 끝까지 하면 대/소문자를 정확 하 게 일치 수 있습니다.
el!"hello"와 일치 하지 않습니다.
hello!"hello"를 찾습니다.
추가 * 필터의 끝에 문자열의 접두사와 일치 하는 확인 합니다.
el*"hello"와 일치 하지 않습니다.
he*"hello"를 찾습니다.
세미콜론으로 구분 된 목록에 여러 개의 필터는 논리합으로 결합 됩니다.
el;wo"hello" 및 "world"와 일치
구체적인 클래스와 가상 메서드 빙하 지 않은
기본적으로는 모든 봉인 되지 않은 클래스에 대 한 스텁 형식이 생성 됩니다..Fakes 구성 파일을 통해 클래스를 추상 스텁 형식을 제한할 수 있습니다.
<Fakes xmlns="https://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" />
<!-- user code -->
<StubGeneration>
<Types>
<Clear />
<Add AbstractClasses="true"/>
</Types>
</StubGeneration>
<!-- /user code -->
</Fakes>
강력한 이름 서명
자동으로 Fake 프레임 워크 shimmed 어셈블리가 강력 하 게 서명 된 경우 생성 된 Fake 어셈블리에 서명 합니다.항상 Fake 프레임 워크는 사용자가 다른 어셈블리에 서명 하려면 키를 지정 하지 않으면 동일한 키를 사용 합니다..Fakes 파일에 다른 키를 지정할 수 있습니다.
<Fakes ...>
<Compilation KeyFile="path to the key file" />
</Fakes>
내부 형식
Fake 코드 생성기 심은 형식을 생성 하 고 형식을 생성 된 Fake 어셈블리에 표시 되는 형식에 대 한 스텁 합니다.내부 형식을 표시 하려면 Fake 어셈블리에 생성 된 가시성을 제공 하는 shimmed 어셈블리에 InternalsVisibleTo 특성을 추가할 수 있습니다.
[assembly: InternalsVisibleTo("FileSystem.Fakes")]
강력한 자동으로 프레임 워크는 Fakes shimmed 어셈블리가 강력 하 게 서명 된 경우 Fake 생성 된 어셈블리에 서명 합니다.이런 경우 InternalsVisibleToAttribute 특성의 공개 키 뿐 아니라 어셈블리 이름을 참조 해야 합니다.항상 Fake 프레임 워크 프로젝트에 InternalsVisibleTo 특성을 추가 하려면이 코드 조각을 시작 지점으로 사용 하도록 어셈블리를 서명 하는 동일한 키를 사용 합니다.
[assembly: InternalsVisibleTo("FileSystem.Fakes, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc")]
빌드 시간을 최적화합니다.
Fake 어셈블리의 컴파일 빌드 시간을 크게 늘릴 수 있습니다.별도 중앙 집중식된 프로젝트 시스템.NET 어셈블리에 대 한 Fake 어셈블리와 타사 어셈블리를 생성 하 여 빌드 시간을 최소화할 수 있습니다.이러한 어셈블리는 거의 컴퓨터에 변경 때문에 Fake 생성 된 어셈블리가 다른 프로젝트에서 재사용할 수 있습니다.
단위 테스트에서 프로젝트를 간단 하 게 Fakesassemblies의 프로젝트 폴더에서 아래에 있는 Fake 컴파일된 어셈블리에 대 한 참조를 사용할 수 있습니다.
테스트 프로젝트와 일치 하는.NET 런타임 버전에서 새 클래스 라이브러리를 만듭니다.이제 Fakes.prebuild를 호출 합니다.Class1.cs 파일에서 필요 하지 않은 프로젝트를 제거 합니다.
모든 시스템에 대 한 참조를 추가 하 고 타사 어셈블리에 대 한 Fake를 해야 합니다.
각 어셈블리에 대 한.fakes 파일을 추가 하 고 빌드하십시오.
테스트 프로젝트에서 어셈블리 참조를 추가 하 고 Fakes.Prebuild\FakesAssemblies 폴더를 찾아 적절 한 어셈블리를 찾기.
어셈블리 이름와 방지
팀 빌드 환경에서는 빌드 출력을 모두 단일 디렉터리에 병합 됩니다.Fake를 사용 하 여 여러 프로젝트의 경우 Fake 어셈블리를 다른 버전에서 서로 재정의할 발생할 수 있습니다.예를 들어,.NET Framework 2.0에서 mscorlib.dll TestProject1 fakes 및 TestProject2 mscorlib.dll에.NET Framework 4에 대 한 모두는 mscorlib에 얻을 수 fakes.Fakes.dll Fake 어셈블리입니다.
이 문제를 방지 하려면 Fake 자동으로 정식 버전 Fake 어셈블리 이름이 아닌 프로젝트 참조에 대 한.fakes 파일을 추가할 때 만들어야 합니다.Fake 버전의 정규화 된 어셈블리 이름을 Fake 어셈블리 이름을 만들 때 버전 번호를 포함 합니다.
MyAssembly 어셈블리 및 버전 1.2.3.4 주어진 Fake 어셈블리 이름은 MyAssembly.1.2.3.4.Fakes입니다.
변경 하거나 버전 특성이 어셈블리 요소에는.fakes의 편집으로이 버전을 제거할 수 있습니다.
attribute of the Assembly element in the .fakes:
<Fakes ...>
<Assembly Name="MyAssembly" Version="1.2.3.4" />
...
</Fakes>
Fake 명명 규칙
심 (shim) 입력 및 스텁 명명 규칙 입력
네임스페이스
.Fake 접미사를 네임 스페이스에 추가 됩니다.
예를 들어, System.Fakes shim 형식은 System 네임 스페이스의 네임 스페이스에 포함 됩니다.
Global.Fakes 심은 종류 빈 네임 스페이스를 포함합니다.
형식 이름
접두사 shim 심은 형식 이름을 빌드 형식 이름에 추가 됩니다.
예를 들어, ShimExample shim 형식의 예제입니다.
스텁 접두사 빌드 스텁 형식 이름을 형식 이름에 추가 됩니다.
예를 들어, StubIExample IExample 형식의 스텁 형식입니다.
인수 및 중첩된 형식 구조를 입력 합니다.
제네릭 형식 인수에 복사 됩니다.
중첩된 형식 구조가 심은 형식에 대 한 복사 됩니다.
명명 규칙 심은 대리자 속성 또는 스텁 대리자 필드
기본 규칙 명명, 시작에서 이름을 필드:
메서드 이름에 추가 됩니다.
명시적 인터페이스 구현은 메서드 이름인 경우 점 제거 됩니다.
제네릭 메서드인 경우 Ofn 추가 되는 n 의 제네릭 메서드의 인수 개수입니다.
특수 메서드 이름은 와 같은 속성 getter 또는 setter는 다음 표에 설명 된 것 처럼 다룹니다.
메서드 이면... |
예제 |
메서드 이름 추가 |
---|---|---|
A 생성자 |
.ctor |
Constructor |
정적 생성자 |
.cctor |
StaticConstructor |
접근자 메서드를 두 부분으로 구성 된 이름 (예: 속성 getter) "_"로 구분 |
kind_name (일반적인 경우 하지만 ECMA에 강제로 적용 안함) |
NameKind, 여기서 두 부분을 모두 대문자로 바꿨습니다 후 |
속성의 getter에Prop |
PropGet |
|
속성의 setterProp |
PropSet |
|
이벤트 adder |
Add |
|
이벤트 제거 파일 |
Remove |
|
운영자 두 부분으로 구성 |
op_name |
NameOp |
예: + 연산자 |
op_Add |
AddOp |
에 변환 연산자, 반환 형식이 추가 됩니다. |
T op_Implicit |
ImplicitOpT |
참고
Getter 및 setter 인덱서의 속성을 비슷하게 취급 됩니다.인덱서 기본 이름인 Item.
매개 변수 형식은 이름이 변환 되 고 연결 됩니다.
반환 형식이 모호한 오버 로드 하지 않는 한 무시 됩니다.이 경우 반환 형식은 이름 끝에 추가 됩니다.
매개 변수 형식 명명 규칙
지정 된 |
추가 된 문자열이입니다. |
---|---|
A 형식T |
T 네임 스페이스, 중첩된 구조 및 일반 tics 삭제 됩니다. |
Out 매개 변수out T |
TOut |
A ref 매개 변수ref T |
TRef |
배열 형식T[] |
TArray |
A 다차원 배열 형식T[ , , ] |
T3 |
A 포인터 형식T* |
TPtr |
A 제네릭 형식T<R1, …> |
TOfR1 |
A 제네릭 형식 인수!i 형식 C<TType> |
Ti |
A 제네릭 메서드 인수!!i 메서드 M<MMethod> |
Mi |
A 중첩된 형식N.T |
N다음 추가T |
재귀의 규칙
다음 규칙은 재귀적으로 적용된 됩니다.
Fake 사용 하므로 C# Fake 어셈블리를 생성 합니다 잘못 된 C# 토큰이 생성 하는 문자 "_" (밑줄) 이스케이프 됩니다.
결과 이름을 선언 하는 형식의 모든 멤버와 충돌 하는 경우 01에서 시작 하는 두 자리 카운터를 추가 하 여 번호 매기기 구성표가 사용 됩니다.
외부 리소스
지침
Visual Studio 2012 2 장 연속 배달 테스트: 단위 테스트: 내부 테스트