我正在处理一系列用户定义的对象。它看起来类似于以下内容:
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
. 我应该能够以任何顺序传递它。我也可以创建一个生成序列的方法,而不是使用生成器语法并模拟该方法,但这似乎有点矫枉过正。
我怎样才能最好地构建这个断言,或者我在这里测试的问题是否表明代码结构不佳?
我正在使用 Python 2.7.3 和 Mock 1.0.1。
(对于任何觉得有必要对此发表评论的人,我知道我在最后做测试,这不是最好的做法。)
编辑:
在观看了 Gregory Moeck 的题为“Why You Don't Get Mock Objects”的精彩演讲后,我重新考虑是否应该嘲笑该calculate_something
方法。