我正在嘗試爲我的代碼設置一個簡單的單元測試。我有一個接口和實現,通過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