当前位置: 首页 > 知识库问答 >
问题:

根据不同的输入参数模拟Python函数unittest python

苗康平
2023-03-14

我有一个实用函数,它接受参数大小写并相应地返回值

helper.py
def get_sport_associated_value(dictionary, category, case):
    if case == 'type':
        return "soccer"
    else: 
        return 1 #if case = 'id'

我有一个使用上述函数的主函数

crud_operations.py
def get_data(category):
    dictionary ={.....}
    id =  get_sport_associated_value(dictionary, category, 'id')
    .....
    .....
    type = get_sport_associated_value(dictionary, category, 'type')
    ....
    return "successful"

现在,我正在使用unittest对get\u data()模块进行单元测试。嘲弄我无法将值传递给id和类型。

@mock.patch('helper.get_sport_associated_value')
def test_get_data(self, mock_sport):
    with app.app_context():
        mock_sport.side_effect = self.side_effect
        mock_sport.get_sport_associated_value("id")
        mock_sport.get_sport_associated_value("type")
        result = get_queries("Soccer")
        asserEquals(result, "successful")

 def side_effect(*args, **kwargs):
     if args[0] == "type":
         print("Soccer")
         return "Soccer"
     elif args[0] == "id":
         print("1")
         return 1

我尝试使用side_effect函数和面向问题根据输入参数的不同值模拟get_sport_associated_value()。

问题2:使用mock或mock的最佳方法是什么。这个场景中的magicmock?

任何帮助是赞赏与单元测试谢谢

共有1个答案

花阳秋
2023-03-14

您错误地将args[0]测试为caseside_effect回调函数的参数应该与您要模拟的函数相同:

def side_effect(dictionary, category, case):
    if case == "type":
        return "Soccer"
    elif case == "id":
        return 1
 类似资料:
  • 问题内容: 我想了解如何从导入的模块执行功能。 这是我到目前为止的位置。 app / mocking.py: app / my_module / init.py: 测试/模拟测试.py: 这不 符合 我的预期。“已修补”模块仅返回的未模拟值。如何模拟要导入到被测名称空间中的其他包中的方法? 问题答案: 当您从包中使用装饰器时,您 未在 修补名称空间(从本例中导入模块),而是在被测试的名称空间中对其

  • 问题内容: 我的课如下: 在构造函数中的逻辑和是我试图嘲弄的事情。我想要任何调用:返回一个虚拟字符串。 我试过了: 但这似乎不起作用。仍在执行构造函数逻辑,而不是获取的模拟对象。 问题答案: 您发布的代码适用于最新版本的Mockito和Powermockito。也许您还没有准备A?试试这个: A.java MockA.java 两项测试均应通过Mockito 1.9.0,powermockito

  • 出于我无法控制的原因,我必须在我的C代码中实现这个函数: 调用此函数时,编译器是否忽略它,或者是否仍然进行调用?例如: 两行代码的执行时间是相同的,还是第一行需要更长的时间?

  • 问题内容: 所以我有这个示例数据框: 现在我想将这些功能和列获得新列。 就像函数使用列和范围作为创建列的输入一样,类似地,列和范围也用于列: 我可以使用这一种衬管一个接一个地创建每个列,但是我想一次用一个衬管将其应用于两个列。 结果数据帧应如下所示: 我想一次创建这些列,而不是一次创建一列。我怎样才能做到这一点?有什么建议?或类似的东西可以工作? 问题答案: 这是您需要遵循的概念才能实现这一目标。

  • 我有以下课程布局: 我正在为服务创建一个单元测试,但我想将ServiceHelper用作一个“活动”类,但要模拟ServiceHelper中的构造函数参数。有没有办法通过Mockito实现这一点?

  • 我有一个带有路由器的express应用程序,我想与Sinon一起测试。我无法成功模拟传递到请求处理程序的参数,希望能得到一些帮助。 这是我当前使用Mocha、Sinon、Chai的测试设置