Когда использовать обратный вызов Mock вместо Return?

Я думаю, что это довольно простая установка, в которой тип поиска создается и передается через уровень сервиса в репозиторий, где возвращается список типа домена. Тип поиска ничего не делает, кроме построения дерева выражений в методе репозитория, и в основном возвращаются результаты из базы данных. Довольно просто

Интерфейс репозитория:

public interface IDoNotSolicitRepo 
{
    IList<DNSContract> SelectWithCriteria(DNS_Search searchriteria); 
}

Служба, реализующая репозиторий:

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);
    }
}

Я работаю над изучением Moq с помощью этого проекта, и я не могу понять, должен ли я использовать Callback () или возвращение(). Я понимаю оба, но в данный момент ни один из них не работает для меня должным образом.

Тест:

[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());
}

Ошибка:

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]'.

Я прочитал, что метод Returns () возвращает переданный тип, поэтому я могу понять причину этой ошибки. Но в реальном мире я хочу, чтобы возвращался другой тип. Я попытался создать делегат обратного вызова, но все это не казалось правильным.

5
задан bryan 12 January 2012 в 20:34
поделиться