Получение логгера при выполнении юнит-теста с использованием xunit и. net core 3.1 - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь получить вывод из регистратора при выполнении моего модульного теста в окне вывода, но ничего не отображается. Я использую ILoggingFactory в тестовом классе. Я ожидаю увидеть весь мой журнал из тестового класса и фактического класса реализации, т.е. JobQueueManager.

Test.cs

public class ScheduledJobDatesTest :IClassFixture<ScheduleJobTestFixture>
    {
        private ScheduleJobTestFixture ScheduleJobFixtureHelper { get; }

        Mock<IDbConnection> mockJobQueueManager = new Mock<IDbConnection>();
        ILoggerFactory logger = new LoggerFactory();

        public ScheduledJobDatesTest(ScheduleJobTestFixture scheduleJobFixture)
        {
            ScheduleJobFixtureHelper = scheduleJobFixture;

            mockJobQueueManager.SetReturnsDefault(new SqlConnection());
            logger = LoggerFactory.Create(a => a.AddConsole());
            logger.CreateLogger("Executing Test");
        }

        [Fact]
        public void ValidScheduledJobDateForNextWeeklyAppointment()
        {
            Debug.WriteLine("Testing");
            logger.CreateLogger("Test").LogInformation("Test Information");
            //Arrange
            JobQueueManager jobQueueManager = new JobQueueManager(mockJobQueueManager.Object, logger.CreateLogger<JobQueueManager>());
            var scheduledJob = ScheduleJobFixtureHelper.GetMockedScheduledJob(JobType.Week);
            //Act
            bool isTrue = jobQueueManager.IsScheduledJobDateValidForJobType(scheduledJob.JobDate);
            //Assert
            Assert.True(isTrue);
        }

}

JobQueueManager.cs

public class JobQueueManager : IJobQueueManager
    {
        public IDbConnection DBConnection { get; }
        public ILogger<JobQueueManager> Logger { get; }

        public JobQueueManager(IDbConnection dbConnection, ILogger<JobQueueManager> logger)
        {
            DBConnection = dbConnection;
            Logger = logger;
            Logger.LogInformation("Initialized Job Queue Manager");
        }

    public bool IsScheduledJobDateValidForJobType(DateTime ScheduledJobDate)
        {
            Logger.LogDebug("Verifying  unit test");
            var currentDate = DateTime.Now;
            var nextJobDate = ScheduledJobDate;
            if (nextJobDate > currentDate)
            {
                var appointmentsDaysDifference = Math.Ceiling((nextJobDate - currentDate).TotalDays);
                if(appointmentsDaysDifference == 1)
                return true;
            }
            return false;
        }
}

1 Ответ

1 голос
/ 11 апреля 2020

Какую версию xUnit вы используете?

Если вы использовали xUnit. net 1.x, возможно, вы ранее записывали вывод в Console, Debug или Trace. Когда xUnit. net v2 поставляется с включенным распараллеливанием по умолчанию, этот механизм захвата вывода больше не подходит; невозможно знать, какой из множества тестов, которые могли выполняться параллельно, отвечал за запись в эти общие ресурсы. Пользователи, которые переносят код с v1.x на v2.x, должны использовать вместо этого один из двух новых методов.

Source

Кажется, что есть количество способов решить эту проблему, если бы это был я, я бы посмотрел на реализацию настраиваемого поставщика .

...