【发布时间】:2022-03-23 18:03:40
【问题描述】:
我正在尝试为 API 编写一组测试,它以以下形式返回结果
{
"metrics": [
{
"key": "Metric1",
"portfolios": [
{
"portfolioKey": "Portfolio1",
"outputs": [
1000000,
1013785.999689,
1040271.12363882
]
}
]
},
{
"key": "Metric2",
"portfolios": [
{
"portfolioKey": "Portfolio1",
"outputs": [
1000000,
986601.99318665,
985925.470917517
]
}
]
}
]
}
如您所见,返回的对象有
- 度量对象数组
- 每个指标都有一个标识它的键
- 每个指标都有一个列表,如果投资组合对于返回的每个指标都是相同的
- 每个投资组合都有一个标识它的密钥
- 指标中的每个投资组合都有一个名为
outputs的双精度数组。
我正在尝试测试的正是这个嵌套的双精度数组,我需要比较给定指标/投资组合组合的输出。但是我只想测试近似平等。为了这个问题,可以说我希望预期结果与0.1内的实际结果相匹配
我正在使用 Fluent Assertions,它在比较对象图时有一些相当不错的documentation,但我似乎无法正确配置它。
这是我的代码:
expectedMetrics.Should().BeEquivalentTo(actualMetrics, options =>
{
options.Using<Metric>(m =>
{
m.Subject.Should().BeEquivalentTo(m.Subject, mo =>
{
mo.WithMapping<Metric>(x => x.Key, x => x.Key);
mo.Using<Portfolio>(p =>
{
p.Should().BeEquivalentTo(p.Subject, po =>
{
po.WithMapping<Portfolio>(x => x.PortfolioKey, x => x.PortfolioKey);
po.WithStrictOrderingFor(x => x.Outputs);
po.Including(x => x.Outputs).Using<double>(x =>
{
x.Subject.Should().BeApproximately(x.Expectation, 0.1);
});
return po;
});
});
return mo;
});
});
options.WithTracing();
return options;
});
这似乎既不使用我的映射,也不使用我的双打近似相等。追踪的一小段摘录说
Expected expectedMetrics.Metrics[0].Portfolios[0].Outputs[1] to be 1013785.9996890002, but found 1013785.999689.
Expected expectedMetrics.Metrics[0].Portfolios[0].Outputs[2] to be 1040271.1236388228, but found 1040271.12363882.
这显然没有检查到 0.1 以内。我究竟做错了什么?
【问题讨论】:
标签: c# fluent-assertions