How to prevent from "System.NotSupportedException : Unsupported expression" while mock ILogger LogInformation method?

Viewed 71

ILogger's usage in my controller's method.

public class MetaDataController
{ 
 private readonly ILogger<MetaDataController> _logger;
 public MetaDataController(ILogger<MetaDataController> logger)
 {
  _logger = logger;
 }
 public async Task<IActionResult> GetSearchFields()
 {
  _logger.LogInformation("Received request for GetSearchFields");
  ..
  ..
 }
}

my test case method

public class MetaDataControllerTests
{
    private readonly MockRepository _mockRepository;
    private readonly Mock<ILogger<MetaDataController>> _mockloggerController;

    public MetaDataControllerTests()
    {
      this._mockRepository = new MockRepository(MockBehavior.Strict);
      this._mockloggerController = this._mockRepository.Create<ILogger<MetaDataController>>();
    }
    private MetaDataController CreateMetaDataController()
    {
     return new MetaDataController(this._mockMetaDataService.Object, this._mockloggerController.Object);
    }

[Fact()]
public async Task GetSearchFields_WhenCalled_ReturnsSearchOptionsMetaData()
{
            //Arrange
//First attempt 
     _mockloggerController.Setup(x => x.LogInformation(It.IsAny<string>(), It.IsAny<object[]>()));
//Second attempt
    _mockloggerController.Setup(x => x.LogInformation(It.IsAny<string>()));

/* at above line of code getting the exception message.*/
     //Act
     var metaDataController = this.CreateMetaDataController();
     var result = await metaDataController.GetFeasibilitySearchFields().ConfigureAwait(false);

     //Assert
}
}

as mention in /**/ comment getting the below exception

Message: System.NotSupportedException : Unsupported expression: x => x.LogInformation(It.IsAny(), new[] { }) Extension methods (here: LoggerExtensions.LogInformation) may not be used in setup / verification expressions.

so how to mock exactly and prevent this exception ?

0 Answers
Related