Laneko Unitate bat ezartzeko daukat, besteak beste, honako metodo honekin:
T Single(Expression> expression) where T : class, new();
eta deitzen diot, adibidez, honela:
var person = _uow.Single(p => p.FirstName == "Sergi");
Nola egin dezaket egiaztatu Bakarra
metodoa deitu dela Izena == "Sergi"
?
Honako hau probatu dut, baina alferrik:
// direct approach
session.Verify(x => x.Single(p => p.FirstName == "Sergi"));
// comparing expressions
Expression> expression = p => p.FirstName == "Sergi");
session.Verify(x => x
.Single(It.Is>>(e => e == expression));
guztiak ondorengo akatsaren emaitza dira:
Mokalean gutxienez behin deitzea espero zen, baina ez zen inoiz burutu
Hori nola egin daitekeen ideiaren bat? NuGet-en azken Moq erabiltzen ari naiz, 4.0.10827.0 bertsioa
EGUNERATZEA: Adibide zehatz bat
Ikusten ari naizena da lambda barruan kate literalak erabiltzen ditudanean, Egiaztatu
lanak. Aldagaiak konparatu bezain laster huts egiten du. Adibidez:
// the verify
someService.GetFromType(QuestionnaireType.Objective)
session.Verify(x => x.Single(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(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(q => q.Type == QuestionnaireType.Objective);
}
Nola huts egiten du Egiaztatu
-k lambda adierazpenean metodo parametroa erabili bezain laster?
Zein izango litzateke proba hau idazteko modu egokia?