Python Unittest высмеивает функцию с аргументом - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь смоделировать функцию, аргумент которой вызывает другой метод.

Я распознаю, что исправляю функцию без аргумента, который вы делаете это

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!'
def test_monthly_schedule(self):
        with patch('employee.requests.get') as mocked_get:
            mocked_get.return_value.ok = True
            mocked_get.return_value.text = 'Success'

            schedule = self.emp_1.monthly_schedule('May')
            mocked_get.assert_called_with('http://company.com/Schafer/May')
            self.assertEqual(schedule, 'Success')

Как можно посмеяться над функцией, имеющей синтаксис, показанный ниже?

Акция (тикер) импортируется и отличается от класса «Акции».

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:

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)

Для краткости показан не весь код. Любая помощь будет оценена. Спасибо!

1 Ответ

0 голосов
/ 20 марта 2020

Stock(ticker) вернет объект некоторого класса, давайте предположим, что класс A. Затем вызов Stock(ticker).get_price вызовет метод A.get_price. Это то, что вы должны исправить.

...