我正在使用机器规格进行测试,有一些我无法做到的事情,想知道以前是否有人在那里,
有没有办法使用Rhino Mocks为使用lambda表达式的方法创建存根,我发现我可以执行以下操作
在示例类中使用此方法:
public void UpdateVisit(int userId){
var user = repository.FindBy<User>(x=>x.Id==userId && user.IsActive ==true);
user.Visit = user.Visit + 1;
repository.Save(user);
}
我可以将这样的方法存根:
//...Inside test method
var user = new User();
repository.Stub(x=>x.FindBy<User>(Arg<Expression<Func<User,bool>>>.Is.Anything)).Return(user);
问题是我想将方法不是任何Lambda表达式,只是针对特定的lambda表达式 "x=>x.Id==userId && user.IsActive ==true"
,以便测试将如果此表达式在方法中发生更改,则会失败...
我想我可以创建一个不会进入数据库并在lambda中测试行为的模拟存储库,虽然这样,我想知道是否有另一种方法...
对此有任何建议, 感谢
答案 0 :(得分:2)
您不想测试方法中是否使用了特定的lambda表达式。您想测试该方法所具有的行为。像特定lambda表达式一样测试实现细节通常太脆弱了。代替:
[Fact]
UpdateVisit_updates_Visit_for_user_that_is_in_the_repository_and_is_active() {
// set up mock repository with dummy user having
// userId == 1,
// IsActive == true,
// Visit = 42
// invoke UpdateVisit
// pull userId == 1 from the repository
Assert.Equal(43, user.Visit);
}
[Fact]
UpdateVisit_does_not_update_visit_for_user_that_is_not_active() {
// etc.
}