Ceci est mon contrôleur:
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);
}
}
Comme vous pouvez le voir, j'ai 2 dépendances, une IDAO
et uneILogger
Et ceci est ma classe de test, j'utilise xUnit pour tester et Moq pour créer une maquette et un stub, je peux me moquer DAO
facilement, mais avec le ILogger
je ne sais pas quoi faire, je passe simplement null et commente l'appel pour se connecter au contrôleur lors de l'exécution du test. Existe-t-il un moyen de tester tout en conservant l'enregistreur d'une manière ou d'une autre?
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
. Il a quelques bonnes suggestions dans son article de blog et je suis venu avec ma solution qui semble résoudre la plupart des problèmes dans la réponse ci-dessous .