How to unit test with ILogger in ASP.NET Core

后端 未结 14 1286
南旧
南旧 2020-12-04 11:47

This is my controller:

public class BlogController : Controller
{
    private IDAO _blogDAO;
    private readonly ILogger _         


        
14条回答
  •  余生分开走
    2020-12-04 12:22

    Use a custom logger that uses ITestOutputHelper (from xunit) to capture output and logs. The following is a small sample that only writes the state to the output.

    public class XunitLogger : ILogger, IDisposable
    {
        private ITestOutputHelper _output;
    
        public XunitLogger(ITestOutputHelper output)
        {
            _output = output;
        }
        public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter)
        {
            _output.WriteLine(state.ToString());
        }
    
        public bool IsEnabled(LogLevel logLevel)
        {
            return true;
        }
    
        public IDisposable BeginScope(TState state)
        {
            return this;
        }
    
        public void Dispose()
        {
        }
    }
    

    Use it in your unittests like

    public class BlogControllerTest
    {
      private XunitLogger _logger;
    
      public BlogControllerTest(ITestOutputHelper output){
        _logger = new XunitLogger(output);
      }
    
      [Fact]
      public void Index_ReturnAViewResult_WithAListOfBlog()
      {
        var mockRepo = new Mock>();
        mockRepo.Setup(repo => repo.GetMany(null)).Returns(GetListBlog());
        var controller = new BlogController(_logger,mockRepo.Object);
        // rest
      }
    }
    

提交回复
热议问题