簡體   English   中英

使用MOQ測試控制器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM