В Fluent Assertions при сравнении объектов со свойствами DateTime иногда наблюдается небольшое несоответствие в миллисекундах, и сравнение не выполняется. Способ обойти это — установить параметр сравнения следующим образом:
actual.ShouldBeEquivalentTo(expected,
options =>
options.Using<DateTime>(ctx => ctx.Subject.Should().BeCloseTo(ctx.Expectation))
.WhenTypeIs<DateTime>());
Есть ли способ настроить это один раз и применять его всегда вместо того, чтобы указывать его каждый раз, когда мы вызываем ShouldBeEquivalentTo?
Обновление 1: попробовал следующий подход, но он не работает, тест не работает с разницей в 1 миллисекунду. Новое значение по умолчанию, похоже, не вызывается фабрикой.
using System;
using FluentAssertions;
using FluentAssertions.Equivalency;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestProject1
{
class Test
{
public DateTime TestDateTime { get; set; }
}
[TestClass]
public class UnitTest1
{
[TestMethod]
public void SettingFluentAssertionDefault()
{
// arrange
var defaultAssertionOptions = EquivalencyAssertionOptions<DateTime>.Default;
EquivalencyAssertionOptions<DateTime>.Default = () =>
{
var config = defaultAssertionOptions();
config.Using<DateTime>(ctx => ctx.Subject.Should().BeCloseTo(ctx.Expectation)).WhenTypeIs<DateTime>();
return config;
};
var testDateTime = DateTime.Now;
var expected = new Test {TestDateTime = testDateTime};
// act
var actual = new Test {TestDateTime = testDateTime.AddMilliseconds(1)};
// assert
actual.ShouldBeEquivalentTo(expected);
}
}
}