Das ist mein 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);
}
}
Wie Sie sehen können, habe ich 2 Abhängigkeiten, a IDAO
und aILogger
Und dies ist meine Testklasse. Ich benutze xUnit zum Testen und Moq zum Erstellen von Mock und Stub. Ich kann DAO
einfach verspotten , aber mit dem ILogger
ich nicht weiß, was ich tun soll, übergebe ich einfach null und kommentiere den Aufruf zum Anmelden des Controllers aus beim Test ausführen. Gibt es eine Möglichkeit zu testen, aber den Logger trotzdem irgendwie zu behalten?
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
. Er hat einige gute Vorschläge in seinem Blogpost und ich bin mit meiner Lösung gekommen, die die meisten Probleme in der Antwort unten zu lösen scheint .