Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用参数模拟函数的Python单元测试_Python_Python 3.x_Unit Testing_Testing_Monkeypatching - Fatal编程技术网

用参数模拟函数的Python单元测试

用参数模拟函数的Python单元测试,python,python-3.x,unit-testing,testing,monkeypatching,Python,Python 3.x,Unit Testing,Testing,Monkeypatching,我试图模拟一个函数,该函数有一个调用另一个方法的参数 我知道在没有参数的情况下修补函数,你可以这样做 def monthly_schedule(self, month): response = requests.get(f'http://company.com/{self.last}/{month}') if response.ok: return response.text else: return

我试图模拟一个函数,该函数有一个调用另一个方法的参数

我知道在没有参数的情况下修补函数,你可以这样做

def monthly_schedule(self, month):
        response = requests.get(f'http://company.com/{self.last}/{month}')
        if response.ok:
            return response.text
        else:
            return 'Bad Response!'
如何模拟具有如下所示语法的函数

股票(股票代码)是导入的,与“股票”类不同

from iexfinance.stocks import Stock
class Stocks:
    def price(self, ticker):
        price = Stock(ticker).get_price()
        self.myStockData.at["price", ticker] = price
这种性质的测试似乎会在每个变量上抛出一个“ModuleNotFoundError”

with patch('stocks.Stock(ticker).get_price') as mock:
with patch('Stock(ticker).get_price') as mock:
with patch('stocks.get_price') as mock:

为简洁起见,并非所有代码都显示出来。 任何帮助都将不胜感激。谢谢

Stock(ticker)
将返回某个类的对象,假设该类是
A
。然后,调用
Stock(ticker.get\u price
将调用方法
A.get\u price
。这就是你必须修补的地方

with patch('stocks.Stock(ticker).get_price') as mock:
with patch('Stock(ticker).get_price') as mock:
with patch('stocks.get_price') as mock:

import unittest
from unittest.mock import patch
from stocks import Stocks

class MyTestCase(unittest.TestCase):
    def test_price(self):
        with patch('stocks.Stock(ticker).get_price') as mock:
            mock = 300.00
            self.test.price('AAPL')
            self.assertEqual(self.test.myStockData.at["price", 'AAPL'], 300)