2017-03-02 14 views
1

私はラムダ式で初めて作業し、これを行う方法を理解しようとしています。私はすでにこのテストファイルに存在するパターンに従っていますが、私の呼び出しには複雑な複雑さがあります。それぞれのオブジェクトの内部を見て、その時点で提供されるIDを持つものすべてを選択する必要があります。テスト。問題は、こののみを検索し、表面レベルのオブジェクトであるラムダ式を使用して一致するIDを持つすべてのオブジェクトを見つけよう

myobject.cs

public class myObject 
{ 
    public myObject() 
    { 
     this.id = Guid.Empty; 
     this.poolId = Guid.Empty; 
     this.name = string.Empty; 
     this.URL = string.Empty; 
    } 

    public Guid id { get; set; } 
    public Guid poolId { get; set; } 
    public string name { get; set; } 
    public string URL { get; set; } 

} 

testfile.cs

Mock<IMyObjectRepository> mock = new Mock<IMyObjectRepository>(MockBehavior.Strict); 

List<myObject> objects = new List<myObject>(); 

mock.Setup(r => r.LoadByPoolId(It.IsAny<Guid>())) 
    .Returns<IEnumerable<myObject>>(objList => objects.Where(obj => objList.Contains(obj.id)); 

、それはオブジェクトのプロパティを検索しません。一致するIDを持つmyObjectsをすべて選択すると欠けている部分は何ですか?

リポジトリインタフェース

public interface IMyObjectRepository 
{ 
    void Put(myObject object) 
    void Delete(Guid appId); 
    myObject Load(Guid appId) 
    IEnumerable<myObject> LoadByPoolId(Guid poolId); 
} 
+0

は嘲笑されているクラス/インタフェースの定義を表示します。あなたの現在のコードから、それが何であるかを推測しています。問題を再現するために使用できる[mcve]を提供してください。 – Nkosi

+0

私は本当に助けになるとは思っていなかったので私はそれを含めなかったが、そこに行く! – jlee

答えて

1

:あなたのケースでは

式はo.id == targetGUIDがこれだけラムダ本体に挿入するだろうobjectsリストをフィルタリングするために使用されます。

参考:Moq Quickstart

+0

ありがとう、私の最も近い試みは近くにあったが、私はリターン>を持っていた。ほんとうにありがとう! – jlee

+0

喜んで助けてください。しばらく時間をとり、ドキュメンテーションを見直してください。ハッピーコーディング!!! – Nkosi

0

LINQのWhere方法は、あなたが望む任意のチェックを実行することを可能にするラムダ式を受け入れます。インクルードする行に対してtrueと評価される式を作成し、それ以外の場合はfalseを書き込みます。提供引数が式に渡されReturns表現で提供された例

var mock = new Mock<IMyObjectRepository>(); 

var objects = new List<myObject>(); 
//...populate objects 

// access invocation arguments when returning a value 
mock.Setup(r => r.LoadByPoolId(It.IsAny<Guid>())) 
    .Returns((Guid arg) => objects.Where(obj => obj.poolId == arg)); 

を使用して

var filteredList = list.Where(o => o.id == targetGUID); 
関連する問題