# tests/test_datafetch.py
import pytest
import pandas as pd
import QUANTAXIS as QA
class TestDataFetch:
"""数据获取测试"""
def test_fetch_stock_day(self):
"""测试获取股票日线"""
data = QA.QA_fetch_stock_day(
code='000001',
start='2024-01-01',
end='2024-01-31'
)
assert data is not None
assert isinstance(data, pd.DataFrame)
assert len(data) > 0
assert 'open' in data.columns
assert 'close' in data.columns
def test_fetch_invalid_code(self):
"""测试无效代码"""
data = QA.QA_fetch_stock_day(
code='INVALID',
start='2024-01-01',
end='2024-01-31'
)
assert data is None or len(data) == 0
@pytest.mark.parametrize("code,expected", [
('000001', True),
('600000', True),
('INVALID', False)
])
def test_multiple_codes(self, code, expected):
"""参数化测试多个股票代码"""
data = QA.QA_fetch_stock_day(code, '2024-01-01', '2024-01-31')
if expected:
assert data is not None and len(data) > 0
else:
assert data is None or len(data) == 0
class TestIndicators:
"""指标计算测试"""
def test_ma_calculation(self):
"""测试MA计算"""
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
ma5 = QA.MA(data, 5)
assert len(ma5) == len(data)
assert ma5.iloc[4] == 3.0 # (1+2+3+4+5)/5
assert ma5.iloc[-1] == 8.0 # (6+7+8+9+10)/5
def test_macd_calculation(self):
"""测试MACD计算"""
data = QA.QA_fetch_stock_day('000001', '2024-01-01', '2024-12-31')
macd = QA.MACD(data['close'])
assert 'DIF' in macd.columns
assert 'DEA' in macd.columns
assert 'MACD' in macd.columns
assert len(macd) == len(data)
# 运行测试
# pytest tests/test_datafetch.py -v