问题描述
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 (将#修改为@)