我认为,这是一个非常简单的设置,其中创建搜索类型并将其传递到服务层并进入存储库,其中返回域类型列表。搜索类型除了在存储库方法中构造表达式树之外什么都不做,基本上数据库的结果会返回。非常简单
存储库界面:
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()或Return()。我得到了两者的总分,但现在似乎都不适合我。
测试:
[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()方法返回传入的类型,所以我可以看到这是该错误的原因。但在现实世界中,我希望返回不同的类型。我试图创建一个回调代理,但没有一个感觉正确。
答案 0 :(得分:3)
将lambda放在.Returns上,即
.Returns(new List<DNSContract>());
你的原文是从你的方法传递参数到返回参数化结果,例如,如果从一个可以根据输入返回不同数据的源中拉出来。
或者
.Returns<IList<DNSContract>>(new List<DNSContract>(){...});