3

Moles 0.94 を実行して、サードパーティのアセンブリで特定の型をスタブ化します。そうしないとテストが困難になります。ローカルでうまく機能し、テストに合格し、ソリューションが正常にコンパイルされます。初めてコンパイルするときは、モール アセンブリを生成するため (\molesassemblies というサブフォルダーにそれらを配置するため)、かなり時間がかかりますが、その後ははるかに高速です。moles は次のように出力します。

Moles : info : compilation : assembly metadata hash unchanged, skipping code generation

問題は、毎回ワークスペースを再同期 (破棄) するビルド サーバーでこの動作をどのように模倣するかということです。これは可能ですか?(現在、TFS 2010 をビルド サーバーとして使用しています)。

単純に \molesassemblies\ というプロジェクト サブフォルダーの内容をチェックインしようとしましたが、ソリューションのコンパイル中に msbuild が moles フレームワークを呼び出したときに、アセンブリが既にそこにあることを認識してコード生成をスキップすることを期待していました。しかし、それだけではうまくいかないようでした。フレームワークは、コードを再生成する必要があると考えたようで、チェックインされたアセンブリが読み取り専用であると不平を言いました。

00:00:00.00> moles
    Moles : info : metadata : ignoring reference D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\MolesAssemblies\3rdparty.assembly.moles.dll
    Moles : info : metadata : loading D:\Builds\49\mycompany\BUILD-NAME\Sources\3rdPartyBinaries\3rdparty\3rdparty.assembly.dll
    Moles : info : compilation : output assembly name: 3rdparty.assembly.moles
    Moles : info : code : found 2912 types
    Moles : info : code : visibility: exported or assembly(3rdparty.assembly.moles)
    00:00:03.10> code generation
      Moles : info : code : generating code at D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\obj\Release\Moles\sk\m.g.cs
      00:00:03.44> stubs generation
        Moles : info : code : generated 2274 stub types
      00:00:08.32> moles generation
        Moles : info : code : generated 2638 mole types
    00:00:45.13> compiling
Moles : error : compilation : D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\MolesAssemblies\3rdparty.assembly.moles.dll readonly [D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\TestHelpers.csproj]
  00:02:27.44> moles generator 1 errors, 0 warnings
C:\Program Files\Microsoft Moles\bin\Microsoft.Moles.targets(79,5): error MSB3073: The command ""C:\Program Files\Microsoft Moles\bin\moles.exe" @D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\obj\Release\Moles\moles.args" exited with code -1009. [D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\TestHelpers.csproj]
  Result: error while copying output (-1009 - 0xfffffc0f)
  MolesAssemblies:
    3rdparty.assembly.moles ignored because already referenced from other location
Done Building Project "D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\TestHelpers.csproj" (default targets) -- FAILED.

これを機能させるために私ができることについてのガイダンスをいただければ幸いです。

ありがとう。

4

1 に答える 1

2

残念ながら、ここには素晴らしい答えはありません。Molesアセンブリは、以前はソース管理とテストプロジェクトの一部にチェックインされていましたが、APIが変更されるたびに、DLLをチェックアウトする必要があり、面倒で煩わしいため、誰もそれを本当に好きではなかったため、Molesチームはこの機能を変更しました。これで、MoleのXMLマニフェストだけがチェックインされます。これを考えると、私が考えることができるいくつかのオプションがあります。

1- [プロセス]タブの[ワークスペースのクリーンアップ]フィールドを[なし]または[出力]に設定して、ビルド間でワークスペースを維持するようにTFSビルド定義を変更し、それが役立つかどうかを確認します

2- Molesアセンブリをソース管理外の場所でホストし、問題のあるテストプロジェクトのビルド前タスクとしてコピーします。

于 2011-11-23T17:17:14.103 に答える