Diese Frage baut ich vorher gefragt:Fluent Assertions: Vergleichen Ungefähr die Eigenschaften von Objekten in Listen gespeichert
Fluent Assertions: Approximately compare a classes properties
Wenn ich eine Klasse haben, sagen Vector3
public class Vector3
{
public double X { get; }
public double Y { get; }
public double Z { get; }
public Vector3(double x, double y, double z)
{
this.X = x;
this.Y = y;
this.Z = z;
}
}
und ist in zwei Listen gebildet, wie kann ich ungefähr die Eigenschaften der Vector3
Objekte in den beiden Listen vergleichen, um zu sehen, ob sie gleich sind. Das ist, was ich habe bisher (ich bin die xUnit Framework, aber das sollte keinen Unterschied machen):
public double precision = 1e-5;
[Fact]
public void ApproximatelyCompareVector3List()
{
// Arrange
var expectedList = new List<Vector3>
{
new Vector3(0.5, 1, 3),
new Vector3(0, 2, 4)
};
// Act
var calculatedList = List<Vector3>
{
new Vector3(0.4999999, 1.0000001, 3),
new Vector3(0.0000001, 2.0000001, 4)
};
//Assert
calculatedList.ShouldBeEquivalentTo(expectedList, options => options
.Using<double>(ctx => ctx.Subject.Should().BeApproximately(ctx.Expectation, precision))
.When(info => info.SelectedMemberPath == "X" ||
info.SelectedMemberPath == "Y" ||
info.SelectedMemberPath == "Z"));
}
Dies scheint jedoch den etwa Test und erfordern eine genaue Ordnung zu überspringen. Ist es möglich, entweder die genaue Reihenfolge oder irgendeine Reihenfolge für den ungefähren Vergleich der Eigenschaften von Objekten in einer Liste zu haben?
Das funktioniert, wenn alle Eigenschaften enthalten sind, obwohl es möglich ist, das 'When' zu ändern, sodass nur ausgewählte Eigenschaften verglichen werden. Zum Beispiel, wenn ich nur "X" und "Z" und nicht "Y" von den beiden Listen vergleichen möchte. – Ayb4btu
Ok, also benutze '.When (info => info.SelectedMemberPath.Endswith (" X ") || info.SelectedMemberPath.Endswith (" Z "));' –
Ich habe das versucht, aber der Test schlägt fehl mit: _Excepted item [0] .Y ist 1, aber gefunden 1.0000001. Erwarteter Artikel [1] .Y ist 2, hat aber 2.0000001 gefunden. Erwarteter Punkt [2] .Y ist 0, aber -1E-07._ So scheint es nicht zu sein, "Y" zu ignorieren, und es überprüft es immer noch, ohne ungefähr zu verwenden. – Ayb4btu