python - 用于浮点集合的 Python 单元测试中的 assertAlmostEqual

标签 python unit-testing collections

assertAlmostEqual(x, y) 中的 Python's unit testing framework 方法测试 xy 是否近似相等,假设它们是 float 。

assertAlmostEqual() 的问题在于它只适用于 float 。我正在寻找像 assertAlmostEqual() 这样的方法,它适用于 float 列表、 float 集、 float 字典、 float 元组、 float 元组列表、 float 列表集等.

例如,让 x = 0.1234567890, y = 0.1234567891xy 几乎相等,因为它们在除最后一位之外的每个数字上都一致。因此 self.assertAlmostEqual(x, y)True 因为 assertAlmostEqual() 适用于 float 。

我正在寻找更通用的 assertAlmostEquals(),它还评估以下对 True 的调用:

  • self.assertAlmostEqual_generic([x, x, x], [y, y, y]).
  • self.assertAlmostEqual_generic({1: x, 2: x, 3: x}, {1: y, 2: y, 3: y}).
  • self.assertAlmostEqual_generic([(x,x)], [(y,y)]).

有这样的方法还是必须自己实现?

说明:

  • assertAlmostEquals() 有一个名为 places 的可选参数,并且通过计算四舍五入到小数位数 places 的差异来比较数字>。默认情况下 places=7,因此 self.assertAlmostEqual(0.5, 0.4) 为 False,而 self.assertAlmostEqual(0.12345678, 0.12345679) 为 True。我推测的 assertAlmostEqual_generic() 应该具有相同的功能。

  • 如果两个列表的数量几乎相等且顺序完全相同,则认为它们几乎相等。正式地,for i in range(n): self.assertAlmostEqual(list1[i], list2[i]).

  • 同样,如果两个集合可以转换为几乎相等的列表(通过为每个集合分配顺序),则它们被视为几乎相等。

  • 同样,如果每个字典的键集几乎等于另一个字典的键集,则认为两个字典几乎相等,并且对于每个这样的几乎相等的键对,都有一个对应的几乎相等的值。

  • 一般来说:我认为两个集合几乎相等,如果它们相等,除了一些对应的 float 几乎相等。换句话说,我想真正比较对象,但在比较过程中的 float 时精度较低(自定义)。

最佳答案

如果您不介意使用 NumPy(Python(x,y) 附带),您可能需要查看 np.testing 模块,其中定义了一个 assert_almost_equal 函数。

签名是np.testing.assert_almost_equal(actual, desired, decimal=7, err_msg='', verbose=True)

>>> x = 1.000001
>>> y = 1.000002
>>> np.testing.assert_almost_equal(x, y)
AssertionError: 
Arrays are not almost equal to 7 decimals
ACTUAL: 1.000001
DESIRED: 1.000002
>>> np.testing.assert_almost_equal(x, y, 5)
>>> np.testing.assert_almost_equal([x, x, x], [y, y, y], 5)
>>> np.testing.assert_almost_equal((x, x, x), (y, y, y), 5)

关于python - 用于浮点集合的 Python 单元测试中的 assertAlmostEqual,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12136762/

相关文章:

python - 找到数据帧中每一行的平均值并返回平均值结果

python - Pandas:合并数据帧并将多个连接值合并到一个数组中

python - 使用多个图像重叠/不工作的 Pygame 动画

unit-testing - 如何使用Jest测试文件下载?

c# - 如何在 Prism 中设置 ServiceLocationProvider 进行单元测试导航?

.net - 用于生成边界条件的单元测试工具

java - 如何处理Map <String,List>中对List的同步访问?

python - 随机分割数据以用于该函数的训练和测试

scala - 在 Scala 中对数组进行插值

java - 为什么抽象实现由 Map.values() 返回?