![](/img/trans.png)
[英]Unit test controller with IConfiguration using Moq and Mock setup returns null
[英]Using MOQ to test controller
我在為我的一個控制器操作編寫單元測試時遇到了麻煩。 這是細節。
此視圖是強類型的:
Inherits="System.Web.Mvc.ViewPage<IEnumerable<Request>>"
這是被測控制器中的方法:
// GET: /Request/List
public ActionResult List()
{
return View("List",
requestRepository.GetAll(User.Id).OrderByDescending(x => x.Id));
}
以下是測試的摘錄(nUnit,MOQ)給我帶來的問題:
//mockRequestRepository
// .Setup(repo => repo.GetAll(It.IsAny<int>()))
// .Returns(List<Request>());
//mockRequestRepository
// .Setup(repo => repo.GetAll(It.IsAny<int>()))
// .Returns(IList<Request>());
//mockRequestRepository
// .Setup(repo => repo.GetAll(It.IsAny<int>()))
// .Returns(IEnumerable<List<Request>>());
mockRequestRepository
.Setup(repo => repo.GetAll(It.IsAny<int>()))
.Returns(It.IsAny<List<Request>>());
由於模糊調用,前三個安裝語句將無法編譯:
Moq.Language.Flow.IReturnsResult<Core.Repositories.IRequestRepository>
Returns(System.Collections.Generic.IList<Core.Entities.Request>
(in interface IReturns<IRequestRepository, IList<Request>>)
Moq.Language.Flow.IReturnsResult<Core.Repositories.IRequestRepository>
Returns(System.Func<System.Collections.Generic.IList<Core.Entities.Request>>
(in interface IReturns<IRequestRepository, IList<Request>>)
第四個將編譯,但當它到達控制器操作中的return語句時拋出此錯誤:
InnerException {"Value cannot be null.\r\nParameter name: source"}
System.Exception {System.ArgumentNullException}
我不認為它是相關的,但是方法有兩個重載,GetAll()和GetAll(int UserId)。 我確定列表中的OrderBy有一些功能,但我對Func概念感到非常不穩定。 謝謝你的幫助!
你也可以和moq一起使用NBuilder 。
_repository.Setup(rep => rep.GetAll(It.IsAny<int>())) // <-- Moq magic
.Returns(
Builder<Request>.CreateListOfSize(10).Build() // <-- NBuilder magic
);
試試這個:
mockRequestRepository.Setup(repo => repo.GetAll(It.IsAny<int>()))
.Returns(new List<Request> { /* empty list */ });
要么
mockRequestRepository.Setup(repo => repo.GetAll(It.IsAny<int>()))
.Returns(new List<Request> {
new Request { Prop1 = ..., PropN = ... },
new Request { Prop1 = ..., PropN = ... },
...
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.