Pythonのユニットテストフレームワークには、浮動小数点数がおおよそ等しいかどうかをテストするためのassertAlmostEqual
メソッドがあります。しかし、このメソッドは浮動小数点数に対してのみ機能します。
例えば、x = 0.1234567890
、y = 0.1234567891
とした場合、x
とy
はほぼ等しいと言えます。なぜなら、それらは最後の桁を除いてすべての桁で一致しているからです。したがって、self.assertAlmostEqual(x, y)
はTrue
を返します。
しかし、リストや辞書などのコレクションに対してassertAlmostEqual
を使用する方法はありません。そのため、自分で実装する必要があります。
以下に、浮動小数点数のコレクションに対してassertAlmostEqual
を使用するための一般的な方法を示します。
def assertAlmostEqual_generic(self, x, y):
if isinstance(x, float) and isinstance(y, float):
self.assertAlmostEqual(x, y)
elif isinstance(x, dict) and isinstance(y, dict):
self.assertEqual(x.keys(), y.keys())
for key in x.keys():
self.assertAlmostEqual_generic(x[key], y[key])
elif isinstance(x, list) and isinstance(y, list):
self.assertEqual(len(x), len(y))
for i in range(len(x)):
self.assertAlmostEqual_generic(x[i], y[i])
else:
self.assertEqual(x, y)
この関数は、浮動小数点数、リスト、辞書など、さまざまな型の値に対してassertAlmostEqual
を適用します。これにより、Pythonのユニットテストで浮動小数点数のコレクションをより効果的にテストすることが可能になります。