相关疑难解决方法(0)

Pytest:模拟具有不同副作用的同一方法的多次调用

我有一个如下所示的单元测试:

# utilities.py  
def get_side_effects():
    def side_effect_func3(self):
        # Need the "self" to do some stuff at run time.
        return {"final":"some3"} 

    def side_effect_func2(self):
        # Need the "self" to do some stuff at run time.
        return {"status":"some2"}
      
    def side_effect_func1(self):
        # Need the "self" to do some stuff at run time.
        return {"name":"some1"} 

    return side_effect_func1, side_effect_func2, side_effect_func2

#################

# test_a.py
def test_endtoend():
   
    s1, s2, s3 = utilities.get_side_effects()
    
    m1 = mock.MagicMock()
    m1.side_effect = s1

    m2 = mock.MagicMock()
    m2.side_effect = s2

    m3 = mock.MagicMock()
    m3.side_effect …
Run Code Online (Sandbox Code Playgroud)

python side-effects mocking pytest

8
推荐指数
1
解决办法
1万
查看次数

如何在我的类中模拟使用 requests.get 的方法?

我正在尝试为我的班级创建一些单元测试。我想模拟这些,这样我就不会在运行其中一些测试时耗尽我的 API 配额。我有多个测试用例将调用该fetch方法,并且根据传递的 URL,我将得到不同的结果。

我的示例类如下所示:

import requests
class ExampleAPI(object):
    def fetch(self, url, params=None, key=None, token=None, **kwargs):
        return requests.get(url).json() # Returns a JSON string
Run Code Online (Sandbox Code Playgroud)

我正在看的教程表明我可以做这样的事情

import unittest
from mock import patch

def fake_fetch_test_one(url):
    ...

class TestExampleAPI(unittest.TestCase):
    @patch('mymodule.ExampleAPI.fetch', fake_fetch_test_one)
    def test_fetch(self):
        e = ExampleAPI()
        self.assertEqual(e.fetch('http://my.api.url.example.com'), """{'result': 'True'}""")
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我收到一条错误消息:

TypeError: fake_fetch_test_one() takes exactly 1 argument (3 given)
Run Code Online (Sandbox Code Playgroud)

requests.get模拟类中方法中的调用的正确方法是什么?我需要能够更改每个测试的模拟响应,因为不同的 URL 可以提供不同的响应类型。

python mocking python-2.7 python-unittest

2
推荐指数
1
解决办法
9625
查看次数