我有以下代码:
var connector = new Mock<IConector>();
connector
.Setup(cn => cn.listar("FetchEstandar", new Estandar(), new {Id = 1}))
.Returns(new List<Estandar>{ new Estandar {Id = 1} });
var entidad = connector.Object
.listar("FetchEstandar", new Estandar(), new {Id = 1});
当我在连接器对象上调用listar
时,出现"Expression Cannot Contain an Anonymouse Type"
错误。我试过犀牛嘲笑和moq。
有什么方法可以嘲笑这种方法吗?难道我做错了什么?或者,我可以忽略这个参数,但我不知道如何。我真的只需要测试第一个参数的值并忽略参数,但我不知道如果我使用它是否或如何获得该值
答案 0 :(得分:1)
我不知道这是否是匹配匿名对象的唯一方法,但可以使用It.Is&lt;&gt;()和反射来完成
public class Estandar {
public int Id { get; set; }
}
public interface IConector {
IEnumerable<Estandar> listar(string name, Estandar estandar, object key);
}
[TestMethod]
public void CheckAnonymous() {
var connector = new Mock<IConector>();
connector.Setup(cn => cn.listar("FetchEstandar",
It.IsAny<Estandar>(),
It.Is<object>(it => MatchKey(it, 1))))
.Returns(new List<Estandar> { new Estandar { Id = 1 } });
var entidad = connector.Object.listar("FetchEstandar", new Estandar(), new { Id = 1 });
Assert.AreEqual(1, entidad.Count());
}
public static bool MatchKey(object key, int soughtId) {
var ret = false;
var prop = key.GetType().GetProperty("Id");
if (prop != null) {
var id = (int)prop.GetValue(key, null);
ret = id == soughtId;
}
return ret;
}