2016-09-09 8 views
1

EF(バージョン6、価値のあるもの)に関しては、私は実際の問題を抱えています。Entity FrameworkとTypeMockを使ったモック

これは私がテストしようとしている方法である:

public async Task<bool> IsSurveyComplete(Guid entityRef) 
    { 
     using (MyDbEntities context = new MyDbEntities()) 
     { 
      MyEntity entity = await context.MyEntities.FindAsync(entityRef); 
      // do stuff 
     } 
    } 

それが実際だから、私は偽の「実体」する必要がありますが、私はちょうどIsolate.Fake.Instanceをやろうとすると、動作しないことに気づきましたMyEntity型のインスタンスではなくObjectProxyです。私はこれを回避する方法がcontext.Configuration.ProxyCreationEnabledをfalseに設定することであることを発見しました。 しかし、これはコンストラクタを除いてどこでも実行できます。私がDbContextConfigurationを偽造しようとすると、依然としてプロキシが使用されます。

だから、私は、使用する新しいコンストラクタを作成したときのテスト:

public MyDbEntities(bool useProxy) 
     : base("name=MyDbEntities") 
    { 
     this.Configuration.ProxyCreationEnabled = useProxy; 
    } 

、その後、私のテストで:

Isolate.WhenCalled(() => new MyDbEntities()).WillReturn(new MyDbEntities(false)); 

しかし、ProxyCreationEnabledプロパティがまだtrueに設定されているとき、I usingステートメントの後に、IsSurveyCompleteメソッドにブレークポイントを設定します。

は私も(多くの、多くの他のものの間で)試してみました:私はブレークポイントを調査する際に

var fakeContext = new MyDbEntities(false); 
    Isolate.Swap.AllInstances<MyDbEntities>().With(fakeContext); 

ここでも、ProxyCreationEnabledが真です。

私はTypeMockをあきらめています!

+0

をあなたはしてくださいすることができます"IsSurveyComplete"のコードとテストをアップロードしますか? –

答えて

2

declaimer:私はtypemock

で働いているあなたは、あなたが使用する必要があり、typemockの間違った機能を使用している:

var fakeContext = Isolate.fake.NextInstance<MyDbEntities>(); 
Isolate.whenCalled(()=>fakeContext.MyEntities). 
    WillReturnCollectionValuesOf(listOfEntities.AsQueryable()); 

の代わり:

var fakeContext = new MyDbEntities(false); Isolate.Swap.AllInstances<MyDbEntities>().With(fakeContext);

関連する問題