一連のユーザー定義オブジェクトを処理しています。次のようになります。
class Thing(object):
def __init__(self, x, y):
self.x = x
self.y = y
私が現在テストしているメソッドには、次のような機能があります。
def my_function(things):
x_calc = calculate_something(t.x for t in things)
y_calc = calculate_something(t.y for t in things)
return x_calc / y_calc
私が直面している問題は、への呼び出しをテストすることcalculate_something
です。私はこれらの呼び出しが起こったことを断言したいと思います、そのようなもの:
calculateSomethingMock.assert_any_call(the_sequence)
に渡されるシーケンスの順序は気にしませんcalculate_something
が、要素がすべて存在することは気にします。ジェネレーター関数をへの呼び出しでラップすることはできますがset
、テストでに渡されるシーケンスのタイプを指定する必要があるとは思いませんcalculate_something
。私はそれにどんな種類のシーケンスも渡すことができるはずです。あるいは、ジェネレータ構文を使用する代わりにシーケンスを生成するメソッドを作成し、そのメソッドをモックすることもできますが、それはやり過ぎのようです。
このアサーションを最適に構造化するにはどうすればよいですか、またはここでのテストの問題は、構造化が不十分なコードを示していますか?
私はPython2.7.3とMock1.0.1を使用しています。
(コメントを余儀なくされていると感じている人は、私が最後にテストを行っていること、そしてこれが最高のプラクティスとは見なされていないことを認識しています。)
編集:
「GregoryMoeckによるモックオブジェクトを取得しない理由」というタイトルのこの素晴らしい講演を見た後、私はメソッドをモックするべきかどうかを再考しましたcalculate_something
。