2

unittestand mock(Michael Foord のモジュール) を使用して、いくつかの Python コードをテストしています。

私はこのようなものを持っています (これはよりきれいに書き直すことができる概念の証明ですが、私の実際のコードはそのfoo関数のように動作する必要があります):

import unittest
from mock import patch

def foo():
    my_list = []

class Test(unittest.TestCase):
    def test_foo(self):
        with patch('__main__.my_list', new=[], create=True) as baz:
            baz.extend(['foo', 'bar'])

            self.assertEqual(foo(), None)
            self.assertListEqual([], baz)

if __name__ == '__main__':
    unittest.main()

したがって、問題は、呼び出しbaz後にモックオブジェクトがそれに応じて変更されず、最後のアサーションが失敗することです。foo()

を使用するmy_list.remove(x)foo()、テスト ケースの変更を確認できますが、そのリストを空にしたいだけです。リストのすべての要素を通過させてから削除したくはありません。いいえ、高速な空の操作が必要です。

.remove(x)を使用せずに、 function の現在の実装を使用して、モック オブジェクトが空になっているかどうかを確認するにはどうすればよいfooですか?

4

1 に答える 1

1

だから、私は自分の質問に答えることになります...

解決策は、で使用することでしmy_list[:] = []foo

create=Trueしかし、そのリストが存在しない場合 (まさにこの POC の場合) にリストが作成され、テストに合格した壊れたコードをテストする可能性があるため、合格は悪いことであることに気付きました。

于 2012-04-26T15:39:23.103 に答える