我正在尝试为我的代码设置一个简单的单元测试。我有一个接口和实现,通过WCF与外部服务对话。我试图用下面的代码来嘲笑这个;使用Moq的嘲讽界面 - 从来没有打嘲笑的方法
private Mock<IPayments> _mockIPayments;
_mockIPayments.Setup(x => x.GetCreditCard(It.IsAny<GetCreditCardRequest>())).Returns(getCreditCardResponse);
在单元测试本身中,我创建了一个最终将调用WCF服务的服务实例;
var paymentService = new PaymentService();
var response = paymentService.GetCardDetails(cardId);
在PaymentService本身中,代码;
var response = ServiceInvoker.Invoke<IPayments, GetCreditCardRequest, GetCreditCardResponse>
(
"Payments",
request,
(proxy, req) => proxy.GetCreditCard(req));
(注意ServiceInvoker.Invoke是只是一个包装,以创建一个通道和处理请求)
我缺少的东西,模拟设置不应该被捕获到GetCreditCard请求?
ETA
为了使它更清楚一点,流程是;
单元测试 - > PaymentsService - > IPayments
这不是起订量是如何工作的。使用_mockPaymentService.Object而不是paymentService – Crowcoder
@Crowcoder _mockPaymentService不是PaymentService,而是IPayments(它是WCF服务公开的合同)。我已经更新了这个例子来反映,这可能会让你改变你的评论? – ChrisBint
在这个特定的代码中,我不知道如何使用它,但Moq不拦截所有后续调用,如一些框架(例如MS假货)。你必须使用模拟对象,否则你会使用实际的实现。这通常与依赖注入一起完成。 – Crowcoder