私たちはモールを使ってレガシーコードをテストしています。現在、すべてのユニットテストは、MSTestまたはResharperのテストランナーを使用してローカルで実行されます。しかし、ビルドサーバー(MSBuildとMSTestを使用して、わずかに変更されたTFS 2010ワークフローを使用しています)では、すべてのMolesテストは失敗します。私のビルドサーバーでは、スタブを取得するだけで、モールではありません
ビルドサーバーで.Moles.dllが生成されたときにスタブ( "S"が付いたクラス)のみが作成されたが、Molesクラス( " M ")。
私たちのコードがまだコンパイルされているのは、私たちの開発者の一人がMolesのフレームワークを作成して構文を簡素化しています。フレームワークはReflectionを使用してメソッドのMolesバージョンを取得しますが、Assembly.GetTypeを呼び出すとnullが返されるため、メソッドを取得しようとするとNullReferenceExceptionがスローされます。
編集:最新バージョンのPex & Molesライブラリがビルドサーバーにインストールされています。
EDIT 2:ここではMSBuildのログイン
"C:\Program Files (x86)\Microsoft Moles\bin\moles.exe" @"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\obj\Debug\Moles\moles.args"
にあるコマンドラインと "moles.args" だから
Common.Logging.moles;DeltaNetUtils.moles;System.configuration.moles /molesfilesonly /referenceassemblies:"<lots-of-dll-files>" /cachepath:"C:\Program Files (x86)\Microsoft Moles\bin\..\MolesAssemblies" /intermediatepath:"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\obj\Debug\Moles" /outputpath:"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\MolesAssemblies" /clrversion:v4.0.30319 /targetframeworkversion:v4.0
Molesのインストール時にMプレフィックスクラスが構築されていません。たぶんあなたはTFSビルドサーバーにインストールする必要があります –
それはインストールされているだけでなく、私は私たちのクラスのMolesバージョンについては標準の.netクラスではないと話しています –
私はまだTFS BuildサーバーにMolesを統合していませんフレームワークを評価しています)、Molesアセンブリ生成はビルドプロセスに統合されていないようです。私は、xxx.Molesを生成することは、ソリューションを右クリックして.mole生成を再実行することによって実行される手動のステップだと思います。プロジェクトに含まれていないMolesAssemblyフォルダがあります。そのため、TFSにチェックインしないと実行時に使用できなくなります。ソリューション/プロジェクトビルドでxxxx.Molesアセンブリの参照が見つからないというTFSビルドに関する警告が表示されますか? –