我有工作执行的单位有(其中包括)以下方法:验证方法调用与Lambda表达式 - 起订量
T Single<T>(Expression<Func<T, bool>> expression) where T : class, new();
,我称呼它,比如,像这样:
var person = _uow.Single<Person>(p => p.FirstName == "Sergi");
如何验证Single
方法已被调用,参数为FirstName == "Sergi"
?
我试过以下,但无济于事:
// direct approach
session.Verify(x => x.Single<Person>(p => p.FirstName == "Sergi"));
// comparing expressions
Expression<Func<Person, bool>> expression = p => p.FirstName == "Sergi");
session.Verify(x => x
.Single(It.Is<Expression<Func<Person, bool>>>(e => e == expression));
他们都导致如下因素的错误:
Expected invocation on the mock at least once, but was never performed
如何任何想法,可以做什么? 我使用的是最新的Moq从的NuGet,版本4.0.10827.0
更新:一个具体的例子
我所看到的是,每当我用的是拉姆达Verify
作品里面的字符串文字。只要我比较变量,它就会失败。案例分析:
// the verify
someService.GetFromType(QuestionnaireType.Objective)
session.Verify(x => x.Single<Questionnaire>(q =>
q.Type == QuestionnaireType.Objective));
// QuestionnaireType.Objective is just a constant:
const string Objective = "objective";
// the method where it's called (FAILS):
public Questionnaire GetFromType(string type)
{
// this will fail the Verify
var questionnaire = _session
.Single<Questionnaire>(q => q.Type == type);
}
// the method where it's called (PASSES):
public Questionnaire GetFromType(string type)
{
// this will pass the Verify
var questionnaire = _session
.Single<Questionnaire>(q => q.Type == QuestionnaireType.Objective);
}
怎么来的Verify
,只要我使用的方法参数的lambda表达式失败?
写这个测试的正确方法是什么?
非常感谢您的回答。我根据新的呃...发现更新了我的问题,因为缺乏更好的单词。有任何想法吗? –
我已更新我的问题以解决可能是您的问题。这真的取决于QuestionnaireType.Objective的类型。我期望如果你使用'ToString()'这两个表达式,你会发现它们是不同类型的。 –
再次感谢,我想是有道理的。但是,那么编写这个测试的正确方法是什么呢?我觉得在这种情况下,嘲笑是阻碍,而不是一个更清晰的代码的工具... –