Ho, quello che penso, è una semplice installazione in cui un tipo di ricerca viene creato e passato attraverso un livello di servizio e in un repository dove viene restituito un elenco di un tipo di dominio. Il tipo di ricerca non fa altro che costruire un albero di espressioni nel metodo del repository e fondamentalmente i risultati del database tornano. Abbastanza sempliceQuando utilizzare il callback di Mock contro il ritorno?
L'interfaccia repository:
public interface IDoNotSolicitRepo
{
IList<DNSContract> SelectWithCriteria(DNS_Search searchriteria);
}
Il servizio di attuazione del repository:
public class DoNotSolicitService : BaseBLLService, IDoNotSolicitService
{
private readonly IDoNotSolicitRepo repo;
private readonly IPartnerService partnerService;
private readonly IDoNotSolicitReasonService dnsReasonSvc;
public DoNotSolicitService(IDoNotSolicitRepo _repo, IPartnerService _partnerSvc, IDoNotSolicitReasonService _dnsReasonSvc)
{
repo = _repo;
partnerService = _partnerSvc;
dnsReasonSvc = _dnsReasonSvc;
}
public ServiceResult<DNSContract> SelectWithCriteria(DNS_Search searchriteria)
{
var results = repo.SelectWithCriteria(searchriteria);
return ReturnServiceResult(results);
}
}
Sto lavorando a imparare Moq con questo progetto e non riesco a capire se io' Dovrei usare un callback() o un return(). Ottengo i punti complessivi di entrambi, ma nessuno dei due sembra funzionare correttamente per me in questo momento.
La prova:
[Test]
public void SelectWithCriteria_FirstName()
{
mockRepository.Setup(mr => mr.SelectWithCriteria(It.IsAny<DNS_Search>()))
.Returns((IList<DNSContract> records) => new List<DNSContract>
{
new DNSContract {FirstName = "unit", LastName = "test"},
new DNSContract {FirstName = "moq", LastName = "setup"}
});
dnsSvc = new DoNotSolicitService(mockRepository.Object, new PartnerServiceStub(), new DoNotSoicitReasonServiceStub());
var result = dnsSvc.SelectWithCriteria(new DNS_Search { FirstName = "unit" });
Assert.IsNotNull(result);
Assert.IsTrue(result.Data.Any());
}
L'errore:
System.ArgumentException was unhandled by user code
Message=Object of type 'EP.Rest.Common.RestHelpers.DNS_Search' cannot be converted to type 'System.Collections.Generic.IList`1[EP.Rest.Domain.Contracts.DNSContract]'.
Ora, ho letto che i rendimenti() restituisce il tipo di passato in, così posso vedere che è la causa di quell'errore Ma nel mondo reale voglio che sia restituito il tipo diverso. Ho tentato di creare un delegato di callback, ma nessuno di questi ha avuto ragione.
Guardando a questo, forse ho violato lo stub v. Finto v. Le responsabilità beffe quando quello che voglio, ma io sono ancora confusa sul richiamata o il ritorno. – BryanGrimes
Controlla la risposta accettata per [questa domanda] (http://stackoverflow.com/questions/2833162/moq-callback-can-you-help-to-understand-it), dovrebbe darti una buona idea. Inoltre collega alla documentazione di Moq spiegandogli un po 'di più. –
@BryanGrimes, ho pubblicato un esempio di callback sulla domanda di riferimento, forse questo sarà di aiuto. –