最小起订量设置中的 DateTimeOffset 抛出异常

问题描述

我有一个记录器的方法

this.logger.LogDebug("Engine start run at: {time}",DateTimeOffset.Now);
this.logger.LogDebug("Engine stopped at: {time}",DateTimeOffset.Now);

我创建了一个带有 moq 设置的 UT 来检查这种情况:

var firstMessageStartLoggingTime = $"Engine start run at: {DateTimeOffset.Now}";
var secondMessageStoppedLoggingTime = $"Engine stopped at: {DateTimeOffset.Now}";

_mockLogger.Setup(e => e.LogDebug(firstMessageStartLoggingTime)).Verifiable(); 
_mockLogger.Setup(e => e.LogDebug(secondMessageStoppedLoggingTime)).Verifiable();

并收到此异常:

Message: 
Moq.MockException : Mock<ILoggerAdapter<Engine>:1>:
This mock Failed verification due to the following:

   ILoggerAdapter<Engine> e => e.LogDebug("Engine start run at: 6/4/2021 8:52:16 AM +03:00",[]):
   This setup was not matched.

   ILoggerAdapter<Engine> e => e.LogDebug("Engine stopped at: 6/4/2021 8:52:16 AM +03:00",[]):
   This setup was not matched.

然后我尝试通过添加 DateTimeProvider 类来更新此案例:

public class DateTimeProvider
{
    public static DateTime Today
    {
        get
        {
            if (!TodayValue.HasValue)
            {
                return DateTime.Today;
            }
            else
            {
                return TodayValue.Value;
            }
        }
    }

    public static DateTime Now
    {
        get
        {
            if (!NowValue.HasValue)
            {
                return DateTime.Now;
            }
            else
            {
                return NowValue.Value;
            }
        }
    }

    public static DateTime UtcNow
    {
        get
        {
            if (!UtcNowValue.HasValue)
            {
                return DateTime.UtcNow;
            }
            else
            {
                return UtcNowValue.Value;
            }
        }
    }

    internal static DateTime? TodayValue { get; set; }

    internal static DateTime? NowValue { get; set; }

    internal static DateTime? UtcNowValue { get; set; }

并用它更新了这个方法方法中的代码):

this.logger.LogDebug("Engine start run at: {time}",DateTimeOffsetProvider.Now);
this.logger.LogDebug("Engine stopped at: {time}",DateTimeOffsetProvider.Now);

并更新了 UT:

DateTime expected = DateTime.Now;
DateTimeProvider.TodayValue = expected;
var firstMessageStartLoggingTime = $"Engine start run at: {expected}";
var secondMessageStoppedLoggingTime = $"Engine stopped at: {expected}";

_mockLogger.Setup(e => e.LogDebug(firstMessageStartLoggingTime)).Verifiable(); 
_mockLogger.Setup(e => e.LogDebug(secondMessageStoppedLoggingTime)).Verifiable();

错误仍然存​​在。 请帮助:)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...