Tengo, lo que creo, es una configuración bastante simple en la que se crea un tipo de búsqueda y se pasa a través de una capa de servicio y en un repositorio donde se devuelve una lista de un tipo de dominio. El tipo de búsqueda no hace más que construir un árbol de expresiones en el método del repositorio y básicamente los resultados de la base de datos vuelven. Bastante simpleCuándo usar la devolución de llamada de Mock versus Return?
La interfaz de repositorio:
public interface IDoNotSolicitRepo
{
IList<DNSContract> SelectWithCriteria(DNS_Search searchriteria);
}
El servicio de ejecución del repositorio:
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);
}
}
estoy trabajando en el aprendizaje Moq con este proyecto y no puedo averiguar si estoy Se supone que debo usar una devolución de llamada() o una devolución(). Obtengo los puntos generales de ambos, pero ninguno parece funcionar correctamente para mí en este momento.
La prueba:
[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());
}
El error:
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]'.
Ahora, he leído que las devoluciones() devuelve el tipo aprobada en, por lo que se puede ver que es la causa de ese error Pero en el mundo real, quiero que se devuelva el tipo diferente. Intenté crear un delegado de devolución de llamada, pero nada de eso se sintió bien.
Al observar esto, tal vez he violado el talón v. V falso. Simulacros de responsabilidades cuando lo que quiero, pero sigo siendo difusa en la devolución de llamada o el Retorno. – BryanGrimes
Echa un vistazo a la respuesta aceptada para [esta pregunta] (http://stackoverflow.com/questions/2833162/moq-callback-can-you-help-to-understand-it), debería darte una buena idea. También se vincula a la documentación de Moq para explicarlo un poco más. –
@BryanGrimes, publiqué un ejemplo de devolución de llamada sobre la pregunta a la que se hace referencia, quizás esto ayude. –