辞書を返す関数の単体テストを書く必要があります。この辞書の値の1つはdatetime.datetime.now()
ですが、テストのたびに変更されます。Python単体テストで揮発性の値を持つディクショナリ?
私は自分のアサートでそのキーを完全に無視したいと思います。今、私は辞書の比較機能を持っていますが、私は本当にこのようassertEqualを使用したい:
def my_func(self):
return {'monkey_head_count': 3, 'monkey_creation': datetime.datetime.now()}
... unit tests
class MonkeyTester(unittest.TestCase):
def test_myfunc(self):
self.assertEqual(my_func(), {'monkey_head_count': 3}) # I want to ignore the timestamp!
は、これを行うための任意のベストプラクティスやエレガントな解決策はありますか?私はassertAlmostEqual()
を認識していますが、これは浮動小数点iircにのみ便利です。
なぜ私はその単純な解決策を考えなかったのですか?私はmy_funcの可能な戻り値の多くをテストする予定ですが、あなたが提案したようにdatetimeをmonkeypatchします。多くのappriciated、本当に賢い! – pojo
teardownメソッドでdatetimeを元に戻すコードを置く必要があります。つまり、このユニットテストは他のテストクラスに影響しません。 –
別のオプションは、datetime.datetime.nowを名前付きパラメータのデフォルトとして渡します。単体テストであなた自身の関数を渡してください。これにより、Monkeypatchingが回避されます。 –