2017-06-05 7 views
2

単体テストではほとんどのインタフェースをモックするためにUnityAutoMoqを使用しますが、最近では実際の動作をより完全にシミュレートするためにテストフレームワークを使用したいという状況に遭遇しました。それが私がやっていることを受け入れるのに役立ちますか?)UnityAutoMoqContainerとの汎用インターフェースの登録

UnityAutoMoqは、UnityAutoMoqContainerがインターフェイスを嘲笑するのを待たずに、具体的なマッピングを登録できるようになると思っていました。これは、私がジェネリックインターフェースを除いて試したことすべてに当てはまります。あなたは私のような視覚的だ場合は、ここで私がしようとしているものの抜粋です:

public static void Register(IUnityContainer container) 
{ 
    ... 
    container.RegisterType(typeof(IService<>), typeof(TestFrameworkService<>), 
     new HierarchicalLifetimeManager(), new InjectionFactory(Create)); 
    ... 
} 

private static object Create(IUnityContainer container, Type type, string name) 
{ 
    var T = type.GetGenericArguments().Single(); 
    return new TestFrameworkService<T>();// For simplicity, pretend this works 
} 

あなたは上から見ることができるように、私は、注射によって、その後、一般的なコンクリートへのジェネリックインターフェイスを登録していますファクトリは着信タイプを使用して解決します(実際の実装は単純化のため省略されています)。これは通常のUnityContainerで動作し、予想されるコンクリートを返します。 UnityAutoMoqContainerは、代わりに注入工場を完全にバイパスしてモックを返します。

誰も私が達成しようとしているもののようなものを試しましたか?何か案は?

答えて

0

この問題は、基礎となるBuilderStrategyにあります。 UnityAutoMoqBuilderStrategyの抜粋です。

public override void PreBuildUp(IBuilderContext context) 
{ 
    var type = context.OriginalBuildKey.Type; 

    if (autoMoqContainer.Registrations.Any(r => r.RegisteredType == type)) 
      return; 

    if (type.IsInterface || type.IsAbstract) 
    { 
     context.Existing = GetOrCreateMock(type); 
     context.BuildComplete = true; 
    } 
} 

ビルダー戦略では、インターフェースが登録されておらず、その作成を傍受しているということです。これは、ジェネリック型定義自体がジェネリック型と同じではないためです。

私はAutoMoqを調べましたが、これは最近更新されましたが、注入工場が発射するのを妨げるのと同じ傍受の制限があります。そうでない場合は、誰かが推奨されている場合

が、その後、私に教えてください:

は参考のために、ここで私は研究automockingライブラリです私はこれを答えと考えています。

関連する問題