我试图测试使用起订量4.0.10827应用服务(上的NuGet),需要查询资料库:Moq与lambda表达式?
public class MyService
{
Repository<MyObject> _Repo;
public MyObject Get (string SomeConstraint)
{
return _Repo
.GetTheFirstOneOrReturnNull (M => M.Constraint.Equals (
SomeContraint, StringComparison.InvariantCultureIgnoreCase
)); // GetTheFirstOneOrReturnNull takes a Func<MyObject, bool>
}
}
如何复制与起订量lambda表达式?我不断收到“不支持的表达式”异常。
下面是我在做什么已经是一个想法:
[TestMethod]
public void GetByMyConstraintShouldReturnWithMyObject()
{
// Arrange
const string MyConstraint = "Constraint";
MyObject Expected = new MyObject { Constraint = MyConstraint };
Mock<Repository<MyObject>> MockRepo = new Mock<Repository<MyObject>>();
MockRepo.Setup (x => x.GetTheFirstOneOrReturnNull (M => M.Constraint.Equals (MyConstraint, StringComparison.InvariantCultureIgnoreCase)))
.Returns (Expected).Verifable();
MyService Service = new MyService (MockRepo.Object);
// Act
MyObject Result = Service.Get (MyConstraint);
// Assert
Assert.AreSame (Expected, Result);
MockRepo.Verify();
}
我在一些其他的答案环顾四周,但我真的不能做出来我在做什么错误(当然是“小白“与Moq)。我得出的结论是,这将是一个痛苦,但我有很多像这样的测试即将到来,并希望现在变得坚实,而不是稍后溺水。
将对象中的lambda表达式封装并传入存储库并让它执行查询的唯一选择是什么?我不想只为我的测试环境更改我的代码,但我不想浪费时间试图将这个东西屈服于我的意愿。
嗯......也许我的问题不是描绘我真正想要测试的东西。我可以不小心回购,这就是我嘲笑它的原因。我只想对服务进行测试。我用这个自定义存根(stub)代替了Moq。它似乎并没有很好地处理Func。 –
2011-06-10 17:24:49