System.ArgumentNullException : Value cannot be null. (Parameter 'logger')

Priya
Priya
1278 Points
37 Posts

I'm using xUnit test for unit testing and trying to test the api endpoints. And for this I'm trying to mock the Logger and passing to the controller. But it's showing errors:

System.ArgumentNullException : Value cannot be null. (Parameter 'logger')

I tried two approaches but not able to success:

I) Using NullLoggerFactory

private readonly ILogger<TestController> _logger;

        public TestControllerTest()
        {
            _logger = new Logger<TestController>(new NullLoggerFactory());
            _controller = new TestController(_logger);
        }

II) Using Mock.Of

private readonly ILogger<TestController> _logger;

        public TestControllerTest()
        {
            _logger = Mock.Of<ILogger<TestController>>();
            _controller = new TestController(_logger);
        }

 

Views: 14789
Total Answered: 2
Total Marked As Answer: 1
Posted On: 21-Apr-2020 01:34

Share:   fb twitter linkedin
Answers
Smith
Smith
2914 Points
78 Posts
         

Try to use following:

private readonly Mock<ILogger<TestController>> _logger;

public TestControllerTest()
{
    _logger = new Mock<ILogger<TestController>>();
    _logger.Setup(m => m.LogError(It.IsAny<Exception>(), It.IsAny<string>()));
    _controller = new TestController(_logger.Object, _service);
    
}
Posted On: 21-Apr-2020 02:56
Thanks Smith. But it's not working to me.
 - Priya  21-Apr-2020 04:50
Rahul Maurya
Rahul M...
4960 Points
31 Posts
         

Please try following:

private readonly Mock<ILogger<TestController>> _logger;

public TestControllerTest()
{
    _logger = new Mock<ILogger<TestResultController>>();
    _controller = new TestController(_logger.Object, _service);
    
}
Posted On: 21-Apr-2020 04:54
Thanks. It works for me.
 - Priya  21-Apr-2020 05:00
 Log In to Chat