gpt4 book ai didi

c# - 如何在 ASP.NET Core 中使用 ILogger 进行单元测试

转载 作者:IT王子 更新时间:2023-10-29 03:42:43 24 4
gpt4 key购买 nike

这是我的 Controller :

public class BlogController : Controller
{
private IDAO<Blog> _blogDAO;
private readonly ILogger<BlogController> _logger;

public BlogController(ILogger<BlogController> logger, IDAO<Blog> blogDAO)
{
this._blogDAO = blogDAO;
this._logger = logger;
}
public IActionResult Index()
{
var blogs = this._blogDAO.GetMany();
this._logger.LogInformation("Index page say hello", new object[0]);
return View(blogs);
}
}

如您所见,我有 2 个依赖项,一个 IDAO 和一个 ILogger

这是我的测试类,我使用 xUnit 进行测试,使用 Moq 来创建模拟和 stub ,我可以轻松地模拟 DAO,但是使用 ILogger 我不会不知道该怎么做,所以我只是传递 null 并在运行测试时注释掉登录 Controller 的调用。有没有一种方法可以测试但仍以某种方式保留记录器?

public class BlogControllerTest
{
[Fact]
public void Index_ReturnAViewResult_WithAListOfBlog()
{
var mockRepo = new Mock<IDAO<Blog>>();
mockRepo.Setup(repo => repo.GetMany(null)).Returns(GetListBlog());
var controller = new BlogController(null,mockRepo.Object);

var result = controller.Index();

var viewResult = Assert.IsType<ViewResult>(result);
var model = Assert.IsAssignableFrom<IEnumerable<Blog>>(viewResult.ViewData.Model);
Assert.Equal(2, model.Count());
}
}

最佳答案

只需模拟它以及任何其他依赖项:

var mock = new Mock<ILogger<BlogController>>();
ILogger<BlogController> logger = mock.Object;

//or use this short equivalent
logger = Mock.Of<ILogger<BlogController>>()

var controller = new BlogController(logger);

您可能需要安装 Microsoft.Extensions.Logging.Abstractions要使用的包 ILogger<T> .

此外,您可以创建一个真正的记录器:

var serviceProvider = new ServiceCollection()
.AddLogging()
.BuildServiceProvider();

var factory = serviceProvider.GetService<ILoggerFactory>();

var logger = factory.CreateLogger<BlogController>();

关于c# - 如何在 ASP.NET Core 中使用 ILogger 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43424095/

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