2017-03-09 18 views
0

私はMOQにこの奇妙な問題があり、私はGetAll( 'include')メソッドを使用してコントローラをテストできません。ユニットテストMoqを使用してGetAllを設定してください。

私のテストの初期化私は

_menusDB.GetAll(s=>s.Sections) 

menusdb.getAllのMOQバージョンを()メソッドは、すべての

他のすべての部品番号で焼成されていないテストしようとしている時はいつでも今

// GetAll 
menusDb.Setup(m => m.GetAll()).Returns(menus.AsQueryable()); 
menusDb.Setup(m => m.GetAll(It.IsAny<Expression<Func<Menu, object>>>())) 
     .Returns((Expression<Func<Menu,object>> pred) => { 
      return menus.AsQueryable(); 
     }); 
// FindByIdAsync 
menusDb.Setup(m => m.FindByByIdAsync(It.IsAny<int>())) 
     .Returns((int x) => Task.FromResult(menus.Find(m => m.ID == x))); 
menusDb.Setup(m => m.FindByByIdAsync(It.IsAny<int>(), It.IsAny<Expression<Func<Menu, object>>[]>())) 
     .Returns((int x, Expression<Func<Menu, 
      object>>[] includeProperties) => Task.FromResult(menus.Find(m => m.ID == x))); 

メソッドが正しくトリガされます。 例

_menusDB.GetAll(); 
_menusDB.FindByByIdAsync(id, 
       m => m.Sections.Select(s => s.Image), 
       m => m.Sections.Select(s => s.MenuItems.Select(mi => mi.Image))); 

これらは、汎用リポジトリに含まれているGetallとfind関数です。

public IQueryable<TEntity> GetAll<TProperty>(Expression<Func<TEntity, TProperty>> propertyToInclude) {    
    return ObjectSet.Include(propertyToInclude); 
} 

public async Task<TEntity> FindByByIdAsync(int id, params Expression<Func<TEntity, object>>[] propertiesToInclude) {    
    var query = propertiesToInclude.Aggregate(ObjectSet as IQueryable<TEntity>, (current, property) => current.Include(property)); 
    return await query.SingleOrDefaultAsync(entity => entity.ID == id).ConfigureAwait(false); 
} 

答えて

0

私は最終的にどこに問題があるかを見出しました。インクルードするGetAllは、オブジェクトの代わりにジェネリックTPropertyを使用してプロパティをインクルードします。モックカントは何とか私はテストで提供するlinqクエリでオブジェクトのプロパティを関連付けます。たぶん、それを動作させる方法がありますが、今は単純にジェネリックプロパティをオブジェクトに変更しました

関連する問題