Egiaztatu metodoa deitu honekin Lambda adierazpena - Moq

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?

18
задан Pflugs 18 August 2015 в 05:27
поделиться