gpt4 book ai didi

c# - Moq 返回类型 IEnumerable 作为 List 返回

转载 作者:行者123 更新时间:2023-11-30 18:11:18 24 4
gpt4 key购买 nike

我无法让最小起订量返回 IEnumerable来自存储库方法的类型。

更新 - 1

我希望我只是遗漏了一些东西,但根据要求,这里是完整的实现。

断言 objResult.Value类型为 IEnumerable<ListItemDTO>是什么失败了。

存储库界面

public interface IRepository
{
Task<IEnumerable<T>> GetListAsync<T>(string storedProcedure, object template);

Task<IEnumerable<T>> GetListAsync<T>(string sql, CommandType commandType, object template);
}

public interface ICRUDRepository<TEntity>
{
Task<TEntity> GetByIdAsync(long Id);

Task<int> AddAsync(TEntity entity);

Task<int> UpdateAsync(TEntity entity);

Task<int> DeleteAsync(long id);
}

public interface ITARRepository : IRepository, ICRUDRepository<TARTracker>
{
Task<IEnumerable<TARTrackerDate>> GetTARTrackerApprovedDates(long tarTrackerId);
Task<IEnumerable<TARTrackerDate>> MergeTARApprovalDateChanges(DataTable approvedDates);
}

Controller

public class TARTrackerController : Controller
{
private readonly ITARRepository Repository;
private readonly ILogger<TARTrackerController> Logger;

public TARTrackerController(ILogger<TARTrackerController> logger, ITARRepository repository)
{
Repository = repository;
Logger = logger;
}

[HttpGet("TARTrackers")]
[SwaggerResponse(HttpStatusCode.OK, typeof(IEnumerable<ListItemDTO>))]
[SwaggerResponse(HttpStatusCode.Unauthorized, null)]
[SwaggerResponse(HttpStatusCode.InternalServerError, null)]
[SwaggerResponse(HttpStatusCode.ServiceUnavailable, null)]
[Description("Get TAR Tracker List")]
public async Task<IActionResult> Get(long accountId)
{
try
{
var trackers = await Repository.GetListAsync<ListItemDTO>("spFDBGetAccountTARList", new { @ParamAccountID = accountId });

return Ok(trackers);
}
catch (Exception e)
{
Logger.LogError(LogEvents.Services, e, $"An error occured in {0}.{1}", nameof(TARTrackerController), nameof(Get));

return StatusCode((int)HttpStatusCode.InternalServerError);
}
}
}

单元测试:

public class TARTrackerControllerTests
{
public static ILogger<TARTrackerController> Logger = Mock.Of<ILogger<TARTrackerController>>();
public static Mock<ITARRepository> Repository = new Mock<ITARRepository>();

public class GetTARTrackersTests
{
[Fct]
public async Task Returns_OK_With_ListItemDTO()
{
//arrange
var id = 12345;
IEnumerable<ListItemDTO> expected = new List<ListItemDTO>();

Repository
.Setup(repo => repo.GetListAsync<ListItemDTO>(It.IsAny<string>(), It.IsAny<object>()))
.ReturnsAsync(expected);

var controller = new TARTrackerController(Logger, Repository.Object);

//act
var result = await controller.Get(id);

//assert
var objResult = Assert.IsType<OkObjectResult>(result);
Assert.Equal(typeof(IEnumerable<ListItemDTO>), objResult.Value.GetType());
}
}
}

我觉得这应该匹配。似乎无法弄清楚发生了什么。有帮助吗?

最佳答案

所以,似乎只是这里的普遍共识的断言是错误的,但实际上应该通过以下方式来完成。

Assert.IsAssignableFrom<IEnumerable<ListItemDTO>>(objResult.Value);

关于c# - Moq 返回类型 IEnumerable 作为 List 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com