在我的测试用例中,我假设如果两个值是 NaN
那么它们是相等的。使用 unittest
断言表达它的方式是什么?下面介绍的两个常用函数不处理这种情况。
v1 = np.nan
v2 = np.nan
self.assertEquals(v1, v2)
self.assertTrue(v1 == v2)
目前对我有效的解决方案是在 assertTrue
中使用 bool 表达式:
self.assertTrue(v1 == v2 or (np.isnan(v1) and np.isnan(v2))
最佳答案
你可以使用:
numpy.testing.assert_equal(v1, v2)
来自 docs :
This function handles NaN comparisons as if NaN was a “normal” number. That is, no assertion is raised if both objects have NaNs in the same positions. This is in contrast to the IEEE standard on NaNs, which says that NaN compared to anything must return False.
当值不相等时它会抛出 AssertionError,它应该可以很好地与 pytest 一起工作,但它可能不适合单元测试。
另一种选择是:
numpy.isclose(v1, v2, equal_nan=True)
但显然它是 math.isclose
的替代品,而不是 ==
。
关于python - unittest - 如何断言两个可能的 NaN 值是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51728427/