用参数模拟函数的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)