在这种情况下,我们怎么嘲笑呢?

2024-06-07 03:10:52 发布

您现在位置:Python中文网/ 问答频道 /正文

让我们提出这个方案

# 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是否将返回一个包含正确值的元组。它取决于一些事情(简化):oshelper.lib.priceBurger,和{}(用户类)

由于我对Michael Foord的mock相当陌生,所以我的新手尝试如下:

编辑看起来不对,因为joiner和{}似乎没有在任何地方使用?在

^{pr2}$

这就像写固定装置。如果方法i_haz_cheezeburger有更多的依赖关系,会怎样呢。当然,我可以重构它们并创建更多的包装器/助手函数。但问题是,或者至少至少混淆是: 我想测试我的输出。我不想知道“没有missell/unbound赋值,因为它是用一个定义好的返回值传递的”,但是设置fixture(或Burger.menu之类的返回值)听起来不对。在

处理这种问题的正确方法是什么?请纠正我的误解。在


Tags: inimporthelperoslibpricemenuburger
1条回答
网友
1楼 · 发布于 2024-06-07 03:10:52

不要模仿标准库-如果标准库有问题,您就有更大的问题(更不用说您几乎肯定没有对标准库进行集成测试,所以模仿它只是隐藏潜在的故障)。在

如果函数的输出依赖于Burger.menu()的返回值,那么如果要测试返回值,则需要为Burger.menu()的模拟版本设置返回值。这是正确的做法。您提供的模拟输入是真实世界输入的受控版本,因此您期望给定这些受控输入的特定输出。使用mock并不能神奇地从方程中删除所有的实际数据。在

相关问题 更多 >