gpt4 book ai didi

c# - 流利的断言 : Approximately compare the properties of objects stored in Lists

转载 作者:太空宇宙 更新时间:2023-11-03 23:16:38 29 4
gpt4 key购买 nike

这个问题建立在我之前问过的一个问题上:

Fluent Assertions: Approximately compare a classes properties

如果我有一个类,说 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;
}
}

并且组成了两个列表,如何大概比较两个列表中的Vector3对象的属性是否相同。这是我目前所拥有的(我使用的是 xUnit 框架,但这应该没有任何区别):

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" ));
}

但是,这似乎跳过了近似测试并需要精确排序。是否可以使用精确排序或任何排序来近似比较列表中包含的对象的属性?

最佳答案

我知道这是一个有点老的问题,但无论如何如果有人偶然发现同样的问题:
里面的代码Using<double>未执行,因为选择的成员路径比较错误。您正在比较列表,这就是为什么路径看起来像 [0].X 的原因

所以你可以用:

.When(info => info.SelectedMemberPath.EndsWith("X") ||
info.SelectedMemberPath.EndsWith("Y") ||
info.SelectedMemberPath.EndsWith("Z")));

或者只是:

.WhenTypeIs<double>());

ShouldBeEquivalentTo 中不需要精确排序默认情况下。

更新:SelectedMemeberPath已重命名为 Path in v.6.0.0.

关于c# - 流利的断言 : Approximately compare the properties of objects stored in Lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37039423/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com