2

私たちは私の会社で新しいグリーンフィールド プロジェクトに着手しており、単体テストでのすべてのモックに Microsoft の Moles フレームワークを使用することが決定されました。私のマネージャーは、理想的には、NSubstitute や Moq などの他のモッキング フレームワークを導入してプロジェクトを複雑にしたくありません。しかし、Moles がモックとスタブを生成する性質上、リファクタリング ツールではうまく機能しないことがわかりました。

たとえば、resharper を使用すると、次のインターフェイスがあれば、モルは次のようなスタブを生成します。

IMyInterface -> SIMyInterface

ここで、IMyInterface を次のような別の名前にリファクタリングする場合: IMyNewInterface

次に、私の単体テストでは、基本的に別の名前を持っているため、Stub クラスは明らかにリファクタリングされません。

単体テストの順列が多くなると、これが大きな問題になることがわかります。リファクタリングは悪夢になり、マントラは「何も変更しないでください!」になります。

Moles を処理できるリファクタリング ツールを知っている、または同様の経験がある人はいますか?


マーリンとマイクの両方に感謝します。私のチームは、妥協して、標準ツールではモックできない型にのみ Moles を使用し、それ以外は NSubstitute などの別のフレームワークを使用することにしました。

4

2 に答える 2

1

2012 年 8 月 16 日更新 - Moles の代わりに Fakes を使用してください。Fakes は Visual Studio 2012 に同梱されており、完全にサポートされている Moles の製品リリースです。

Moles にはサードパーティ ベンダーのサポートはありません。なぜなら、これは公式にリリースおよびサポートされているテクノロジーではなく、まだ変化しているからです。Moles と Pex の属性とテスト メソッドを生成する CodeRush テンプレートをいくつか作成しました。ただし、これは型名のリファクタリングには役立ちません。

コード全体で名前をリファクタリングし、アセンブリをテストするというあなたのアイデアは良いものです。皮肉なことに、mole 型はコンパイル済みのアセンブリに由来するため、リファクタリングできません。あなたができる最善の方法は、コードをリファクタリングしてから、テスト プロジェクトで検索と置換を実行することです (うん。) はい、特にいくつかのことをリファクタリングした後では、これは醜いです。


ほくろの提案:

コンパイルされたアセンブリを生成するのではなく、コンパイルされていない Moles プロジェクトを生成するように、RiSE が (再び) Moles を微調整することをお勧めします。アセンブリがはるかに簡単であることはわかっていますが、これにより、開発者はモール クラスのモールおよびスタブ型名をリファクタリングできます。さらに、Refactorなどのリファクタリングツールも!Pro は、コード、モル、およびテスト プロジェクト全体で、コードとモルのタイプ名の両方を自動的にリファクタリングできる必要があります。

于 2011-09-20T18:13:47.697 に答える
0

Microsoft Moles Reference Manualによると、「コード生成の構成」の 11 ページに次のように記載されています。

コンパイルを無効にすることもできます。その場合、Moles コード ジェネレーターは生成された C# ソースをプロジェクトに挿入します。

上記のコンパイルを無効にする方法は、要素が存在しない場合Compilationは (ルート)Moles要素の子として要素を追加し、その子要素にProjectTemplate属性を追加して、その値を .csproj ファイルのパスに設定することです。これは、Visual Studio の XML エディターによって表示される属性の IntelliSense の説明 (私のコンピューターでは にある Moles スキーマのドキュメントから取得C:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas\moles.xsd) を読んだことに基づいており、次のようになっています。

コンパイル用の Moles アセンブリ プロジェクトの作成に使用される空の C# プロジェクト ファイルへのパス

于 2011-09-28T22:24:02.153 に答える