Ini pengontrol saya:
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);
}
}
Seperti yang Anda lihat, saya memiliki 2 dependensi, a IDAO
dan aILogger
Dan ini adalah kelas pengujian saya, saya menggunakan xUnit untuk menguji dan Moq untuk membuat tiruan dan rintisan, saya dapat mengejek dengan DAO
mudah, tetapi dengan ILogger
saya tidak tahu apa yang harus dilakukan jadi saya hanya memberikan null dan mengomentari panggilan untuk masuk pengontrol saat uji coba. Apakah ada cara untuk menguji tetapi tetap mempertahankan logger?
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
. Dia memiliki beberapa saran bagus di posting blognya dan saya telah datang dengan solusi saya yang tampaknya menyelesaikan sebagian besar masalah dalam jawaban di bawah ini .