我最近搬到了我公司的一個新項目。我的任務是爲我們的一個控制器編寫REST API的單元測試。控制器實現了接口System.Web.Http.ApiController。我正在使用Moq,這是我第一次使用這個很酷的小庫。我的問題是,當我撥打電話ApiController.Ok()在單元測試中返回null
IHttpActionResult result = Ok();
在控制器中,對Ok()的調用返回null。這隻發生在我從單元測試中調用這個方法的時候。如果我直接使用Swagger調用我的方法,它會按預期工作。
我想,可能是起訂量語句我使用設置控制器的參數/控制器本身與控制器的實例在某種程度上搞亂,使訪問不繼承的接口方法?下面是我使用的設置單元測試代碼:
//Mock ICrmService to return an Id for a created company
var crmCacheService = new Mock<ICrmCacheService>();
var crmService = new Mock<ICrmService>();
crmCacheService.Setup(x => x.CreateSubscription(It.IsAny<CreateSubscriptionModel>())).Returns(true);
crmService.Setup(x => x.CreateSubscription(It.IsAny<CreateSubscriptionModel>())).Returns(ReturnedSubscriptionId);
var controller = new Mock<SubscriptionController>(crmService.Object, crmCacheService.Object);
IHttpActionResult actionResult = controller.Object.CreateSubscriptions(Guid.NewGuid().ToString(), 1);
沒有人有任何想法,爲什麼這會使得調用好()返回NULL?我怎樣才能設置它,以便調用Ok()將返回System.Web.Http.Results.OkResult的正常結果?
就是這樣。很有幫助。謝謝! – KSF