Đây là bộ điều khiển của tôi:
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);
}
}
Như bạn thấy tôi có 2 phụ thuộc, a IDAO
và aILogger
Và đây là lớp thử nghiệm của tôi, tôi sử dụng xUnit để kiểm tra và Moq để tạo ra giả và sơ khai, tôi có thể giả DAO
dễ dàng, nhưng với ILogger
tôi không biết phải làm gì nên tôi chỉ chuyển null và nhận xét cuộc gọi để đăng nhập bộ điều khiển khi chạy thử. Có cách nào để kiểm tra nhưng vẫn giữ logger bằng cách nào đó?
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());
}
}
ILogger
. Anh ấy có một số gợi ý tốt trong blogpost của mình và tôi đã đưa ra giải pháp của mình mà dường như giải quyết được hầu hết các rắc rối trong câu trả lời dưới đây .