Estoy usando .net 4 con C#, EntityFramework 4 y Moq 4. Estoy intentando burlarme de mi UnitOfWork, un repositorio y finalmente una llamada a un método.Problema Mocking Lambda con el repositorio de Unitofwork
Aquí está el código que estoy teniendo problemas con
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));
la firma del método para 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; }
}
Lo que espero que suceda: I estoy esperando que cuando llamo a mi método GetFirst de cFieldRepositoryMock, será matc h la expresión lambda que paso frente a la expresión que definí en la configuración.
Qué pasa: que estoy recibiendo un error de compilación en la tarea de configuración: "un árbol de expresión no puede contener una llamada o invocación que utiliza argumentos opcionales"
que estoy haciendo algo mal con claridad, estoy simplemente no estoy seguro de qué. Cualquier consejo es apreciado, soy bastante nuevo en pruebas unitarias.
Gracias! AFrieze
Podría publicar la declaración si CField y el método firma de getfirst()? – David
Hola David, agregué la información solicitada. No puedo publicar toda la clase de CField, así que publiqué los campos relevantes con los tipos correctos y los niveles de accesibilidad. – AFrieze
¿Ha agregado un argumento para el argumento orderBy (con It.IsAny <...> o null)? No sé exactamente, pero creo que Moq está usando Expressions y creo que debes proporcionar * all * Arguments aquí. – Carsten