【发布时间】:2013-01-22 17:50:02
【问题描述】:
我正在处理一系列用户定义的对象。它看起来类似于以下内容:
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。
(对于任何觉得有必要对此发表评论的人,我知道我在最后做测试,这并不是最好的做法。)
编辑:
看了this marvelous talk entitled "Why You Don't Get Mock Objects by Gregory Moeck"之后,我重新考虑是否应该嘲笑calculate_something方法。
【问题讨论】:
标签: python unit-testing mocking