C#: ILogger를 단위 테스트하는 방법은 무엇입니까?

2426 단어
logger.LogError() 또는 logger.LogInformation()는 확장된 메서드이므로 이러한 메서드를 직접 조롱할 수 없습니다.

this stackoverflow 에 따르면 약간의 트릭으로 밑줄 방법을 사용하여 모의할 수 있습니다.

단위 테스트 logger.LogError



이것이 한 번만 호출되도록 logger.LogError에 대한 단위 테스트를 작성하는 방법입니다.

Log 메서드는 내부 클래스인 세 번째 인수에서 FormattedLogValues 클래스 인스턴스를 사용하므로 인스턴스화할 수 없습니다. 따라서 나는 It.IsAny<It.IsAnyType>()를 사용합니다.

Mock<MyService> mockedMyService = new();
mockedILogger.Verify(x => x.Log(
  LogLevel.Error,
  It.IsAny<EventId>(),
  It.IsAny<It.IsAnyType>(),
  It.IsAny<Exception>(),
  It.IsAny<Func<It.IsAnyType, Exception?, string>>()),
  Times.Once);

LogWarning , LogInformation 와 같은 다른 확장 방법은 동일한 방식으로 작동합니다.

좋은 웹페이지 즐겨찾기