让我们提出这个方案
# This code lives in lolcat-web/lolapps/lolburger/burger.py
import os
from helper.lib import price
def i_haz_cheezeburger(Burger, user):
kings_burgers = []
queens_burgers = []
address = os.path.join(user.hometown, burger_king_addr)
burger_menu = Burger.menu()
for burger in burger_menu:
if burger == 'King':
kings_burgers.append({
'name': burger,
'price': price(burger)
})
else:
queens_burgers.append(...)
return (kings_burgers, queens_burgers)
我想测试函数i_haz_cheezeburger
是否将返回一个包含正确值的元组。它取决于一些事情(简化):os
,helper.lib.price
,Burger
,和{
由于我对Michael Foord的mock
相当陌生,所以我的新手尝试如下:
编辑看起来不对,因为joiner
和{
这就像写固定装置。如果方法i_haz_cheezeburger
有更多的依赖关系,会怎样呢。当然,我可以重构它们并创建更多的包装器/助手函数。但问题是,或者至少至少混淆是:
我想测试我的输出。我不想知道“没有missell/unbound赋值,因为它是用一个定义好的返回值传递的”,但是设置fixture(或Burger.menu
之类的返回值)听起来不对。在
处理这种问题的正确方法是什么?请纠正我的误解。在
不要模仿标准库-如果标准库有问题,您就有更大的问题(更不用说您几乎肯定没有对标准库进行集成测试,所以模仿它只是隐藏潜在的故障)。在
如果函数的输出依赖于
Burger.menu()
的返回值,那么如果要测试返回值,则需要为Burger.menu()
的模拟版本设置返回值。这是正确的做法。您提供的模拟输入是真实世界输入的受控版本,因此您期望给定这些受控输入的特定输出。使用mock
并不能神奇地从方程中删除所有的实际数据。在相关问题 更多 >
编程相关推荐