我在运行单元测试来检查
decimal
值是否符合我的预期时遇到问题。这是我尝试过的:
func Test_example(t *testing.T) {
t.Run("test if two decimals are equal", func(t *testing.T) {
sum_amount := decimal.NewFromFloat(1000.00)
.Add(decimal.NewFromFloat(5000.00))
require.Equal(t, decimal.NewFromFloat32(6000.00), sum_amount))
})
}
如您所见,
sum_amount
是一个decimal
。然而,在测试用例中比较两者的结果与指数等略有不同。
我如何正确断言这些值与stretchr/testify相等?
例如这是差异:
Diff:
--- Expected
+++ Actual
@@ -4,6 +4,6 @@
abs: (big.nat) (len=1) {
- (big.Word) 6
+ (big.Word) 6000
}
}),
- exp: (int32) 3
+ exp: (int32) 0
}
您可以利用
decimal.Equal
,以便可以使用库比较值以返回 bool
,然后测试该结果是否为 true
。
像这样:
require.Equal(t, decimal.NewFromFloat(6000.00).Equal(sum_amount), true)
此外,您可以使用
true
检查结果是否为
require.True
,而不是比较两个值是否相等
这就是最终结果:
require.True(t, decimal.NewFromFloat(6000.00).Equal(sum_amount))
decimal.Decimal.Equal
的替代方案可能适用于大多数情况,并且在断言失败时仍然会产生信息丰富的错误消息 - 比较预期小数和断言小数的字符串表示形式:
require.Equal(t, decimal.NewFromFloat(6000.00).String(), sum_amount.String())