I have a class Vector3D
that has the properties X
, Y
and Z
of type double (it also has other properties such as Magnitude
).
What is the best way of approximately comparing all the properties or a selection of the properties at a given precision using Fluent Assertions?
Currently I have been doing it like this:
calculated.X.Should().BeApproximately(expected.X, precision);
calculated.Y.Should().BeApproximately(expected.Y, precision);
calculated.Z.Should().BeApproximately(expected.Z, precision);
Is there a single line approach that will achieve the same thing? Such as using ShouldBeEquivalentTo
, or does this require constructing a generic extension method that allows properties to be included / excluded?
Yes it's possible using ShouldBeEquivalentTo. The following code will check all properties that are of type double with a precision of 0.1 :
If you want to compare only the X, Y and Z properties change the When constraint like this :
Another approach is to explicitly tell to FluentAssertions which properties should be compared, but it's a bit less elegant :
Since the
Using
statement does not return aEquivalencyAssertionOptions<T>
we need to hack it by calling theWhen
statement with an always true expression.