5
我使用.net 4與C#,EntityFramework 4和Moq 4.我試圖嘲笑我的UnitOfWork,一個倉庫,最後一個方法調用。使用Unitofwork的倉庫嘲笑Lambda
這裏是
var unitOfWorkMock = new Mock<UnitOfWork>();
var cFieldRepositoryMock = new Mock<IRepository<CField>>();
System.Linq.Expressions.Expression<Func<CField, bool>> query = (x) => x.CID == c && x.FID == parentFID;
cFieldRepositoryMock.Setup(x => x.GetFirst(query));
方法簽名爲GetFirst我有麻煩的代碼:
T GetFirst(Expression<Func<T, bool>> query = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null);
CField:
public class CField
{
public CField()
{
//do stuff
}
public int ID { get; set; }
public int FID { get; set; }
public int CID { get; set; }
}
我期待發生的事情: 我我期待,當我打電話給我的cFieldRepositoryMock的GetFirst方法,它會matc h我傳入的lambda表達式與我在Setup中定義的表達式相反。
發生的事情: 我的設置分配得到一個編譯器錯誤:「表達式樹不能包含使用可選參數的調用或調用」
我清楚地做錯了什麼,我只是不知道是什麼。任何建議表示讚賞,我對單元測試相當陌生。
謝謝! AFrieze
你能發佈CField的聲明和getfirst()的方法簽名? – David
嗨大衛,我添加了所需的信息。我無法發佈整個CField類,因此我發佈了具有正確類型和可訪問性級別的相關字段。 – AFrieze
你有沒有爲orderBy-Argument添加一個參數(有It.IsAny <...>或null)?我不完全知道,但我認爲Moq本身使用表達式,我認爲你必須在這裏提供* all *參數。 – Carsten