Microsoft Fakes의 코드 생성, 컴파일 및 명명 규칙

이 항목에서는 Fake 코드 생성 및 컴파일 옵션 및 문제에 설명 하 고 생성 Fake 형식, 멤버 및 매개 변수에 대 한 명명 규칙에 설명 합니다.

요구 사항

  • Visual Studio Ultimate

항목 내용

다음은 무엇을 배울 수 있습니다.

Code generation and compilation

Fakes Naming Conventions

코드 생성 및 컴파일

Hh708916.collapse_all(ko-kr,VS.110).gif스텁 코드 생성 구성

스텁 형식이 생성.fakes 파일 확장명을 가진 XML 파일에 구성 되어 있습니다.Fake 프레임 워크 빌드 프로세스 사용자 지정 MSBuild 작업을 통해 통합 및 빌드 시에 이러한 파일을 검색 합니다.Fake 코드 생성기 스텁 형식이 어셈블리로 컴파일합니다 및 프로젝트에 대 한 참조를 추가 합니다.

다음 예제에서는 스텁 형식이 Filesystem.dll에서 정의 보여 줍니다.

<Fakes xmlns="https://schemas.microsoft.com/fakes/2011/">
    <Assembly Name="FileSystem"/>
</Fakes>

Hh708916.collapse_all(ko-kr,VS.110).gif형식 필터링

제한 종류 스텁 해제 된 수 해야 하는.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"와 일치

Hh708916.collapse_all(ko-kr,VS.110).gif구체적인 클래스와 가상 메서드 빙하 지 않은

기본적으로는 모든 봉인 되지 않은 클래스에 대 한 스텁 형식이 생성 됩니다..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>

Hh708916.collapse_all(ko-kr,VS.110).gif강력한 이름 서명

자동으로 Fake 프레임 워크 shimmed 어셈블리가 강력 하 게 서명 된 경우 생성 된 Fake 어셈블리에 서명 합니다.항상 Fake 프레임 워크는 사용자가 다른 어셈블리에 서명 하려면 키를 지정 하지 않으면 동일한 키를 사용 합니다..Fakes 파일에 다른 키를 지정할 수 있습니다.

<Fakes ...>
  <Compilation KeyFile="path to the key file" />
</Fakes>

Hh708916.collapse_all(ko-kr,VS.110).gif내부 형식

Fake 코드 생성기 심은 형식을 생성 하 고 형식을 생성 된 Fake 어셈블리에 표시 되는 형식에 대 한 스텁 합니다.내부 형식을 표시 하려면 Fake 어셈블리에 생성 된 가시성을 제공 하는 shimmed 어셈블리에 InternalsVisibleTo 특성을 추가할 수 있습니다.

[assembly: InternalsVisibleTo("FileSystem.Fakes")]

강력한 자동으로 프레임 워크는 Fakes shimmed 어셈블리가 강력 하 게 서명 된 경우 Fake 생성 된 어셈블리에 서명 합니다.이런 경우 InternalsVisibleToAttribute 특성의 공개 키 뿐 아니라 어셈블리 이름을 참조 해야 합니다.항상 Fake 프레임 워크 프로젝트에 InternalsVisibleTo 특성을 추가 하려면이 코드 조각을 시작 지점으로 사용 하도록 어셈블리를 서명 하는 동일한 키를 사용 합니다.

[assembly: InternalsVisibleTo("FileSystem.Fakes, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc")]

Hh708916.collapse_all(ko-kr,VS.110).gif빌드 시간을 최적화합니다.

Fake 어셈블리의 컴파일 빌드 시간을 크게 늘릴 수 있습니다.별도 중앙 집중식된 프로젝트 시스템.NET 어셈블리에 대 한 Fake 어셈블리와 타사 어셈블리를 생성 하 여 빌드 시간을 최소화할 수 있습니다.이러한 어셈블리는 거의 컴퓨터에 변경 때문에 Fake 생성 된 어셈블리가 다른 프로젝트에서 재사용할 수 있습니다.

단위 테스트에서 프로젝트를 간단 하 게 Fakesassemblies의 프로젝트 폴더에서 아래에 있는 Fake 컴파일된 어셈블리에 대 한 참조를 사용할 수 있습니다.

  1. 테스트 프로젝트와 일치 하는.NET 런타임 버전에서 새 클래스 라이브러리를 만듭니다.이제 Fakes.prebuild를 호출 합니다.Class1.cs 파일에서 필요 하지 않은 프로젝트를 제거 합니다.

  2. 모든 시스템에 대 한 참조를 추가 하 고 타사 어셈블리에 대 한 Fake를 해야 합니다.

  3. 각 어셈블리에 대 한.fakes 파일을 추가 하 고 빌드하십시오.

  4. 테스트 프로젝트에서 어셈블리 참조를 추가 하 고 Fakes.Prebuild\FakesAssemblies 폴더를 찾아 적절 한 어셈블리를 찾기.

Hh708916.collapse_all(ko-kr,VS.110).gif어셈블리 이름와 방지

팀 빌드 환경에서는 빌드 출력을 모두 단일 디렉터리에 병합 됩니다.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 명명 규칙

Hh708916.collapse_all(ko-kr,VS.110).gif심 (shim) 입력 및 스텁 명명 규칙 입력

네임스페이스

  • .Fake 접미사를 네임 스페이스에 추가 됩니다.

    예를 들어, System.Fakes shim 형식은 System 네임 스페이스의 네임 스페이스에 포함 됩니다.

  • Global.Fakes 심은 종류 빈 네임 스페이스를 포함합니다.

형식 이름

  • 접두사 shim 심은 형식 이름을 빌드 형식 이름에 추가 됩니다.

    예를 들어, ShimExample shim 형식의 예제입니다.

  • 스텁 접두사 빌드 스텁 형식 이름을 형식 이름에 추가 됩니다.

    예를 들어, StubIExample IExample 형식의 스텁 형식입니다.

인수 및 중첩된 형식 구조를 입력 합니다.

  • 제네릭 형식 인수에 복사 됩니다.

  • 중첩된 형식 구조가 심은 형식에 대 한 복사 됩니다.

Hh708916.collapse_all(ko-kr,VS.110).gif명명 규칙 심은 대리자 속성 또는 스텁 대리자 필드

기본 규칙 명명, 시작에서 이름을 필드:

  • 메서드 이름에 추가 됩니다.

  • 명시적 인터페이스 구현은 메서드 이름인 경우 점 제거 됩니다.

  • 제네릭 메서드인 경우 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.

  • 매개 변수 형식은 이름이 변환 되 고 연결 됩니다.

  • 반환 형식이 모호한 오버 로드 하지 않는 한 무시 됩니다.이 경우 반환 형식은 이름 끝에 추가 됩니다.

Hh708916.collapse_all(ko-kr,VS.110).gif매개 변수 형식 명명 규칙

지정 된

추가 된 문자열이입니다.

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

Hh708916.collapse_all(ko-kr,VS.110).gif재귀의 규칙

다음 규칙은 재귀적으로 적용된 됩니다.

  • Fake 사용 하므로 C# Fake 어셈블리를 생성 합니다 잘못 된 C# 토큰이 생성 하는 문자 "_" (밑줄) 이스케이프 됩니다.

  • 결과 이름을 선언 하는 형식의 모든 멤버와 충돌 하는 경우 01에서 시작 하는 두 자리 카운터를 추가 하 여 번호 매기기 구성표가 사용 됩니다.

외부 리소스

Hh708916.collapse_all(ko-kr,VS.110).gif지침

Visual Studio 2012 2 장 연속 배달 테스트: 단위 테스트: 내부 테스트

참고 항목

개념

Microsoft Fakes를 사용하여 테스트 중인 코드 격리