2012-11-06 7 views
20

私は、いくつかのデータオブジェクトを作成するために使用されるファクトリへのインタフェースを持っています。FakeItEasyを使用してReturns()のパラメータ値にアクセスするには?

interface IFactory 
{ 
    IData Create (string name, string data); 
} 

interface IData 
{ 
    // .... 
} 

class Data : IData 
{ 
    public Data (string name, string data) 
    { 
     // ..... 
    } 
} 

モックファクトリを作成して別のモジュールに渡す必要があり、このモジュールはこのモックを使用してデータを作成します。

class QuickModule 
{ 
    private readonly IFactory _factory; 

    public QuickModule (IFactory factory) 
    { 
     _factory = factory; 
    } 

    public IEnumerable<IData> GetData() 
    { 
     yield return _factory.Create ("name1", "abc"); 
     yield return _factory.Create ("name2", "def"); 
    } 
} 

ので、工場はパラメータの二組で2回呼び出されます

は簡単な例では、簡単なモジュールは次のようになります。

は、部品番号を使用して、これは簡単です:

var factoryMock = new Mock<IFactory>(); 
factoryMock.Setup (x => x.Create (It.IsAny<string>(), It.IsAny<string>())) 
        .Returns ((string name, string data) => new Data (name, data)); 
var module = new QuickModule (factoryMock.Object); 
var list = module.GetData(); 

しかしこれを可能にしていないようですFakeItEasyを使用して:

var factory = A.Fake<IFactory>(); 
A.CallTo (() => factory.Create (A<string>.Ignored, A<string>.Ignored)) 
       .Returns (new Data (???, ???)); 
var module = new QuickModule (factory); 
var list = module.GetData(); 

がどのようにパラメータの値にアクセスすることができますか?

答えて

40

[OK]を返すと、返信が返されるように見えます。

だからここは私がやったことだ:

var factory = A.Fake<IFactory>(); 
A.CallTo (() => factory.Create (A<string>.Ignored, A<string>.Ignored)) 
       .ReturnsLazily ((string name, string data) => new Data (name, data)); 
var module = new QuickModule (factory); 
var list = module.GetData(); 

が、これは推奨される方法ですまたは別のがありますか?

+5

これはお勧めの方法です。 –

0

メソッドに渡されたオブジェクトを返す方法は次のとおりです。

ManufacturedPart inputPart; 

A.CallTo(() => partRepo.InsertPart(A<ManufacturedPart>._)) 
    .ReturnsLazily(x => inputPart = x.Arguments.Get<ManufacturedPart>("part")); 
関連する問題