smallgeek

Swing god gun, I need it low demon

Fakes Framework で自動生成される Shim や Stub を制限する

Visual Studio 2012 Update 2 から Premium でも Fakes Framework を使用できるようになりました。 Moles は Visual Studio 2012 だと、ホストが見つからずに実行できませんが、Fakes なら問題なく実行できます。

さて、Moles を使っていたときは、乗っ取り用に生成されるテストを制限していました。これは、Moles が生成する中間ファイルが非常に大きかったためです。中間ファイルの行数は乗っ取るライブラリのサイズに比例して大きくなってしまいます。メモリリークが発生することも。そのため、必要最低限のクラスのみ生成するように、.moles ファイルを使用して制限をかけていました。

<Moles xmlns="http://schemas.microsoft.com/moles/2010/">
  <Assembly Name="FsNinja.Library" />
  <MoleGeneration>
    <TypeFilter Namespace="FsNinja.Foo" TypeName="Hoge" />
    <TypeFilter Namespace="FsNinja.Bar" TypeName="Piyo" />
  </MoleGeneration>
</Moles>

Fakes の場合は .fakes ファイルを使用して同様に制限をかけることが可能です。

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="FsNinja.Library"/>
  <StubGeneration Disabled="true" />
  <ShimGeneration>
    <Clear />
    <Add Namespace="FsNinja.Foo" TypeName="Hoge" />
    <Add Namespace="FsNinja.Bar" TypeName="Piyo" />
  </ShimGeneration>
</Fakes>

Fakes では Stub と Shim の両方を制限することができます。 クラスが大量にある場合、Clear タグを挿入した後に必要なクラスを Add タグで追加するほうが、Remove タグを使用するよりも簡単です。 Disabled 属性を true に指定すると、Stub または Shim が全く生成されなくなります。