亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

模擬 IEnumerable<T> 返回 null

模擬 IEnumerable<T> 返回 null

C#
慕容3067478 2023-09-16 17:00:03
我正在使用 XUnit 單元測試來測試 .NET Core 2.1 中的 API 控制器。我正在使用最小起訂量來模擬我的接口存儲庫。當我進行設置時調試我的單元測試,它在到達控制器之前仍然顯示為空。我嘗試使用Returnsor構建結果ReturnsAsync。使用單獨的函數返回列表或IEnumerable<T>.控制器[HttpGet]public async Task<IActionResult> GetPendingApprovals(){    var user = _serviceRepository.GetUserName(User);    var userId = await _serviceRepository.GetUserID(user);    var result = await _requestRepository.GetPendingApprovalsByApprover(userId);    if (!result.Any()) return NoContent();    return Ok(result);}測試private Mock<IServiceRepository> mockServiceRepo;private Mock<IRequestRepository> mockRequestRepo;private ApprovalController controller;public ApproverControllerTests(){    mockServiceRepo = new Mock<IServiceRepository>();    mockRequestRepo = new Mock<IRequestRepository>();    ILogger<ApprovalController> mockLoggerRepo = Mock.Of<ILogger<ApprovalController>>();    controller = new ApprovalController(mockRequestRepo.Object, mockServiceRepo.Object, mockLoggerRepo);}[Fact]public async Task GetPendingApprovals_HasPending_ReturnsResultAsync(){     // Arrange     var mockRequests = new List<Request>     {         new Request { Id = 1,             PONumber = "ABC0001",             RequestorId = 1,             SubmitDate = new DateTime(),             ApproverId = 2,             StatusId = 1,             Split = false,             VendorId1 = 1,             Remarks = "         },         new Request { Id = 2,             PONumber = "ABC0002",             RequestorId = 1,             SubmitDate = new DateTime(),             ApproverId = 2,             StatusId = 1,             Split = false,             VendorId1 = 1,             Remarks = "        }     };調試測試本身mockRequest為空,因此當它進入控制器時,它滿足空檢查并且不返回任何內容響應。
查看完整描述

1 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

最有可能User是空,因為我沒有看到任何設置,也GetUserName沒有設置做任何事情,所以它也將為空。


因此模擬的期望不匹配,默認返回 null。


GetUserID放松對It.IsAny<string>()獲得預期行為的期望。


[Fact]

public async Task GetPendingApprovals_HasPending_ReturnsResultAsync() {

    // Arrange

    var mockRequests = getUsers();

    var userId = 1;

    mockServiceRepo

        .Setup(repo => repo.GetUserID(It.IsAny<string>()))

        .ReturnsAsync(userId);


    mockRequestRepo

        .Setup(repo => repo.GetPendingApprovalsByApprover(userId))

        .ReturnsAsync(mockRequests);


    // Act

    var result = await controller.GetPendingApprovals();


    // Assert

    var actionResult = Assert.IsType<OkObjectResult>(result);


    //...


}


List<Request> getUsers() {

    //... omitted for brevity

}


查看完整回答
反對 回復 2023-09-16
  • 1 回答
  • 0 關注
  • 127 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號