【问题标题】:Getting logger out in while doing unit test using xunit and .net core 3.1在使用 xunit 和 .net core 3.1 进行单元测试时退出记录器
【发布时间】:2023-03-27 10:33:01
【问题描述】:

在输出窗口中运行单元测试时,我试图从记录器获取输出,但没有显示。我在测试类中使用 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;
        }
}

【问题讨论】:

    标签: c# moq xunit


    【解决方案1】:

    您使用的是哪个版本的 xUnit?

    如果您使用 xUnit.net 1.x,您可能之前一直在编写输出 到控制台、调试或跟踪。当 xUnit.net v2 附带 默认开启并行化,这种输出捕获机制 不再合适;不可能知道众多中的哪一个 可以并行运行的测试负责编写 到那些共享资源。将代码从 v1.x 移植到的用户 v2.x 应该使用这两种新方法之一。

    Source

    似乎有很多方法可以解决这个问题,如果是我,我会考虑实施 custom provider

    【讨论】:

    • 这是一个 xUnit 问题,可以根据自定义提供程序链接非常容易地解决。我不会引入另一个依赖项来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多