assertAlmostEqual(x, y)方法Python's unit testing framework測試x
和y
假設它們是浮點數,它們大致相等。assertAlmostEqual在Python單元測試中用於浮點數集合
assertAlmostEqual()
的問題是它只適用於浮動。我正在尋找一種類似於assertAlmostEqual()
的方法,該方法適用於浮點,浮點集,浮點字典,浮點元組,浮點元組列表,浮點列表集合等。
例如,讓x = 0.1234567890
,y = 0.1234567891
。 x
和y
幾乎是相等的,因爲它們對除了最後一個數字之外的每個數字都一致。因此self.assertAlmostEqual(x, y)
是True
,因爲assertAlmostEqual()
適用於浮動。
我正在尋找一個更通用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])
。類似地,如果兩個集合可以轉換爲幾乎相同的列表(通過爲每個集合分配一個訂單),則認爲兩個集合幾乎相等。
類似地,如果每個字典的密鑰集幾乎等於另一個字典的密鑰集,則認爲兩個字典幾乎相等,並且對於每個這樣幾乎相等的密鑰對,存在對應的幾乎相等的值。
一般來說:我認爲兩個集合幾乎相等,如果它們相等的話,除了一些相應的花車幾乎相等。換句話說,我想真正比較一下對象,但是在比較浮動的過程中比較低(定製的)精度。
而不是比較浮動,你比較字符串?好的...但是,那麼設置一個通用格式會不會更容易?像'fmt =「{{0:{0} f}}」.format(decimals)',並使用這個'fmt'格式來「串化」你的浮點數? –
(我知道這是一個味道的問題,但我發現與if幾乎不可讀的同一行上的單個語句)。 –
那麼,當集合沒有順序時,你對列表,元組和集合使用相同的MO?! –