Каков правильный способ протестировать эту функцию «setUp ()» внутри этого класса?

#python #python-3.x #algorithmic-trading #trading

#python #python-3.x #алгоритмическая торговля #торговля

Вопрос:

Это из книги L earn Алгоритмическая торговля — Себастьен Донадио и Сурав Гош

полный код src >> https://github.com/PacktPublishing/Learn-Algorithmic-Trading/tree/master/Chapter7

Я должен протестировать

TradingStrategy.py

с помощью этого

TradingStrategy_ut.py

Из TradingStrategy_ut.py Я должен вызвать функцию setUp(), чтобы инициализировать класс TradingStrategy.

 class TestMarketSimulator(unittest.TestCase):

    def setUp(self):
        self.trading_strategy= TradingStrategy()
 

Я пробовал и не понимаю, как заставить ее работать, потому что класс TradingStrategy, который находится в TradingStrategy.py файл принимает 3 параметра.

 class TradingStrategy:
    def __init__(self, ob_2_ts, ts_2_om, om_2_ts):
        self.orders = []
        self.order_id = 0
        self.position = 0
        self.pnl = 0
        self.cash = 10000
        self.current_bid = 0
        self.current_offer = 0
        self.ob_2_ts = ob_2_ts
        self.ts_2_om = ts_2_om
        self.om_2_ts = om_2_ts
 

и каждый раз, когда я вызываю функцию setUp (), у меня возникает эта ошибка:

 x = TestMarketSimulator()
x.setUp()
 

 Traceback (most recent call last):
  File "TradingStrategy_ut.py", line 72, in <module>
    x.setUp()
  File "TradingStrategy_ut.py", line 9, in setUp
    self.trading_strategy= TradingStrategy()
TypeError: __init__() missing 3 required positional arguments: 'ob_2_ts', 'ts_2_om', and 'om_2_ts'
 

Комментарии:

1. «Из TradingStrategy_ut.py Я должен вызвать функцию setUp(), чтобы инициализировать класс TradingStrategy » — нет, вы этого не делаете. unittest обработает вызов этого. Предполагается, что вы полагаетесь на unittest фреймворк для этого материала.

2. Вам не нужно вызывать setUp . Вам просто нужно обеспечить правильную реализацию setUp , включая вызов TradingStrategy с правильными параметрами.

3. Вы вызываете метод TradingStrategy ‘s __init__() , который принимает эти 3 параметра. Похоже, что setup пытается заменить __init__() любой способ, поэтому вы, вероятно, можете просто полностью удалить функцию

4. Спасибо вам всем!!

Ответ №1:

РЕШЕНИЕ:

python3 -m unittest TradingStrategy_ut.py

а также: отредактировано TradingStrategy.py

добавлено None после каждого параметра

   class TradingStrategy:
        def __init__(self, ob_2_ts=None, ts_2_om=None, om_2_ts=None): 
            self.orders = []
            self.order_id = 0
            self.position = 0
            self.pnl = 0
            self.cash = 10000
            self.current_bid = 0
            self.current_offer = 0
            self.ob_2_ts = ob_2_ts
            self.ts_2_om = ts_2_om
            self.om_2_ts = om_2_ts