2016-09-13 19 views
0

私は単体テスト用の模擬ライブラリとしてMoqを使用しています。Moqユニットテスト:Moq.Proxy.CastleProxyFactoryのSystem.TypeInitializationException

私にこのエラーを与えるとして、それは、苦労城ウィンザーライブラリを見つけることがありそうです:

System.TypeInitializationException : Une exception a été levée par l'initialiseur de type pour 'Moq.Mock`1'. 
    ----> System.TypeInitializationException : Une exception a été levée par l'initialiseur de type pour 'Moq.Proxy.CastleProxyFactory'. 
    ----> System.IO.FileNotFoundException : Impossible de charger le fichier ou l'assembly 'Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' ou une de ses dépendances. Le fichier spécifié est introuvable. 
    à Moq.Mock`1.<InitializeInstance>b__24_0() 
    à Moq.PexProtector.Invoke(Action action) 
    à Moq.Mock`1.InitializeInstance() 
    à Moq.Mock`1.OnGetObject() 
    à Moq.Mock.GetObject() 
    à Moq.Mock.get_Object() 
    à Moq.Mock`1.get_Object() 
    à TecLib.Common.Tests.Infrastructure.CqrsRepositoryBaseTest.SetUp() dans C:\Users\Ludovic\Documents\Visual Studio 2015\Projects\TEC2\TecLib.Common.Tests\Infrastructure\CqrsRepositoryBaseTest.cs:ligne 38 
--TypeInitializationException 
    à Moq.Proxy.CastleProxyFactory..ctor() 
    à Moq.Mock`1..cctor() 
--FileNotFoundException 
    à Moq.Proxy.CastleProxyFactory..cctor() 

これは、エラーを誘発する試験の一つです。コードは完全に正常に動作します。何らかの理由でCastle Windsor Libraryを見つけることができないように見えるので、エラーを引き起こすのはMoqライブラリです。

[SetUp] 
    public void SetUp() 
    { 
     _eventStore = new Mock<IEventStore>(); 
     _eventDispatcher = new Mock<IEventDispatcher>(); 
     _entityFactory = new Mock<IEntityFactory>(); 

     _repository = new CqrsAddressRepository(_entityFactory.Object, _eventStore.Object, _eventDispatcher.Object); 
     _addressInfo1 = new AddressInfo("400 chemin Jette", "", "", "Farnham", "J0J2B0", "Quebec", "Canada"); 
     _addressInfo2 = new AddressInfo("322 rue Principale E", "", "", "Farnham", "J2N1L7", "Quebec", "Canada"); 
    } 

これらは、これらのテストの前に完全に働いたそのプロジェクトのための私のパッケージ

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Castle.Core" version="3.3.3" targetFramework="net461" /> 
    <package id="Castle.Windsor" version="3.3.0" targetFramework="net461" /> 
    <package id="Moq" version="4.5.21" targetFramework="net461" /> 
    <package id="NUnit" version="3.4.1" targetFramework="net461" /> 
</packages> 

です。何が変わったのか分かりません。

4.6.1 .netフレームワークをインストールしたことがありますか?

助けてください!

答えて

3

あなたのエラーメッセージは言う:

System.IO.FileNotFoundException:インポッシブル・デ・チャージャールfichier OU L'アセンブリ「Castle.Core、バージョン= 3.3.0.0、文化=中立、 なPublicKeyTokenを= 407dd0808d44fbdc 'は、あなたの年齢を表しています。 Le fichier spécifiéest introuvable。

あなたのパッケージには、以下の構成があるしかし:

<package id="Castle.Core" version="3.3.3" targetFramework="net461" /> 
  1. を、あなたのユニットテストプロジェクトとコードの両方が、アセンブリの正しいバージョンを使用していますか?
  2. App.configファイルにリダイレクトバインディングがありますか? https://stackoverflow.com/a/31013829/283787
  3. どちらも同じNuGetパッケージを使用していますか?
  4. FusionLoggerを使用して、アセンブリがどのように解決されているかを確認できないことがあります。
-2

私はあなたと非常に似ている問題に遭遇しました。唯一の違いは、別のテストで再利用するために私のソリューションでいくつかの偽のビジネスモックを生成するカスタムライブラリを構築したことだけです。

Moqのdllの古いバージョンが私の単体テストプロジェクトの1つとして参照として現れたのはわかりません。

これは私の問題を解決するものである:

  1. 部品番号と城のために残されたパッケージの設定が残っていなかったことを確認するためにパッケージファイルをチェックし、あなたのテストプロジェクト内のすべての部品番号NuGetパッケージを削除します。
  2. テストプロジェクトを確認するレガシーリファレンスが存在しないことを確認するための参考文献もあります。 Visual Studioが正しく機能しない場合は、自分自身を削除します。
  3. Visual Studioを終了し、ソリューションディレクトリに移動し、 "packages"という名前のフォルダを探します。 Moqという名前のフォルダがあるかどうか確認してください。その場合は削除してください。
  4. MoqパッケージをパッケージマネージャコンソールまたはMoqライブラリに依存するすべてのテストプロジェクトの「Manage Nuget Packages」オプションを使用して再インストールします。
-1
  1. 未使用のDLLをすべて削除してください。
  2. Package.ConfigファイルをVS App.Configと比較し、バージョンがマッシュアップであることを確認してください。
関連する問題