From 4ac2afacfa328da099f32b13dab8a0dc6dbd6d9d Mon Sep 17 00:00:00 2001 From: enenn Date: Sat, 7 Apr 2018 23:00:07 +0200 Subject: [PATCH] Use global backtest instance for backtesting tests --- freqtrade/tests/optimize/test_backtesting.py | 41 +++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/freqtrade/tests/optimize/test_backtesting.py b/freqtrade/tests/optimize/test_backtesting.py index 7b80baca4..2af78d808 100644 --- a/freqtrade/tests/optimize/test_backtesting.py +++ b/freqtrade/tests/optimize/test_backtesting.py @@ -6,6 +6,7 @@ import random from copy import deepcopy from typing import List from unittest.mock import MagicMock +import pytest import numpy as np import pandas as pd @@ -18,7 +19,17 @@ from freqtrade.optimize.backtesting import Backtesting, start, setup_configurati from freqtrade.tests.conftest import default_conf, log_has # Avoid to reinit the same object again and again -_BACKTESTING = Backtesting(default_conf()) +_BACKTESTING = None +_BACKTESTING_INITIALIZED = False + + +@pytest.fixture(scope='function') +def init_backtesting(default_conf, mocker): + global _BACKTESTING_INITIALIZED, _BACKTESTING + if not _BACKTESTING_INITIALIZED: + mocker.patch('freqtrade.exchange.validate_pairs', MagicMock(return_value=True)) + _BACKTESTING = Backtesting(default_conf) + _BACKTESTING_INITIALIZED = True def get_args(args) -> List[str]: @@ -266,7 +277,7 @@ def test_setup_configuration_with_arguments(mocker, default_conf, caplog) -> Non ) -def test_start(mocker, default_conf, caplog) -> None: +def test_start(mocker, init_backtesting, default_conf, caplog) -> None: """ Test start() function """ @@ -306,10 +317,11 @@ def test_backtesting__init__(mocker, default_conf) -> None: assert init_mock.call_count == 1 -def test_backtesting_init(default_conf) -> None: +def test_backtesting_init(mocker, default_conf) -> None: """ Test Backtesting._init() method """ + mocker.patch('freqtrade.exchange.validate_pairs', MagicMock(return_value=True)) backtesting = Backtesting(default_conf) assert backtesting.config == default_conf assert isinstance(backtesting.analyze, Analyze) @@ -319,7 +331,7 @@ def test_backtesting_init(default_conf) -> None: assert callable(backtesting.populate_sell_trend) -def test_tickerdata_to_dataframe(default_conf) -> None: +def test_tickerdata_to_dataframe(init_backtesting, default_conf) -> None: """ Test Backtesting.tickerdata_to_dataframe() method """ @@ -338,7 +350,7 @@ def test_tickerdata_to_dataframe(default_conf) -> None: assert data['UNITTEST/BTC'].equals(data2['UNITTEST/BTC']) -def test_get_timeframe() -> None: +def test_get_timeframe(init_backtesting) -> None: """ Test Backtesting.get_timeframe() method """ @@ -356,7 +368,7 @@ def test_get_timeframe() -> None: assert max_date.isoformat() == '2017-11-14T22:59:00+00:00' -def test_generate_text_table(): +def test_generate_text_table(init_backtesting): """ Test Backtesting.generate_text_table() method """ @@ -397,6 +409,7 @@ def test_backtesting_start(default_conf, mocker, caplog) -> None: mocker.patch('freqtrade.freqtradebot.Analyze', MagicMock()) mocker.patch('freqtrade.optimize.load_data', mocked_load_data) mocker.patch('freqtrade.exchange.get_ticker_history') + mocker.patch('freqtrade.exchange.validate_pairs', MagicMock(return_value=True)) mocker.patch.multiple( 'freqtrade.optimize.backtesting.Backtesting', backtest=MagicMock(), @@ -426,7 +439,7 @@ def test_backtesting_start(default_conf, mocker, caplog) -> None: assert log_has(line, caplog.record_tuples) -def test_backtest(default_conf) -> None: +def test_backtest(init_backtesting, default_conf) -> None: """ Test Backtesting.backtest() method """ @@ -445,7 +458,7 @@ def test_backtest(default_conf) -> None: assert not results.empty -def test_backtest_1min_ticker_interval(default_conf) -> None: +def test_backtest_1min_ticker_interval(init_backtesting, default_conf) -> None: """ Test Backtesting.backtest() method with 1 min ticker """ @@ -465,7 +478,7 @@ def test_backtest_1min_ticker_interval(default_conf) -> None: assert not results.empty -def test_processed() -> None: +def test_processed(init_backtesting) -> None: """ Test Backtesting.backtest() method with offline data """ @@ -492,7 +505,7 @@ def test_backtest_pricecontours(init_backtesting, default_conf, mocker) -> None: # Test backtest using offline data (testdata directory) -def test_backtest_ticks(default_conf): +def test_backtest_ticks(init_backtesting, default_conf): ticks = [1, 5] fun = _BACKTESTING.populate_buy_trend for tick in ticks: @@ -501,7 +514,7 @@ def test_backtest_ticks(default_conf): assert not results.empty -def test_backtest_clash_buy_sell(default_conf): +def test_backtest_clash_buy_sell(init_backtesting, default_conf): # Override the default buy trend function in our default_strategy def fun(dataframe=None): buy_value = 1 @@ -513,7 +526,7 @@ def test_backtest_clash_buy_sell(default_conf): assert results.empty -def test_backtest_only_sell(default_conf): +def test_backtest_only_sell(init_backtesting, default_conf): # Override the default buy trend function in our default_strategy def fun(dataframe=None): buy_value = 0 @@ -535,7 +548,7 @@ def test_backtest_alternate_buy_sell(init_backtesting, default_conf, mocker): assert len(results) == 3 -def test_backtest_record(default_conf, mocker): +def test_backtest_record(init_backtesting, default_conf, mocker): names = [] records = [] mocker.patch( @@ -574,7 +587,7 @@ def test_backtest_record(default_conf, mocker): assert dur > 0 -def test_backtest_start_live(default_conf, mocker, caplog): +def test_backtest_start_live(init_backtesting, default_conf, mocker, caplog): default_conf['exchange']['pair_whitelist'] = ['UNITTEST/BTC'] mocker.patch('freqtrade.exchange.get_ticker_history', new=lambda n, i: _load_pair_as_ticks(n, i))