test.py

"""
AI Quant 项目测试程序
"""

import sys
import os
import logging
import unittest

# 添加项目根目录到路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    handlers=[
        logging.FileHandler("aiquant_test.log"),
        logging.StreamHandler()
    ]
)

logger = logging.getLogger("AIQuant.test")


def run_tests(test_file: str = None):
    """
    运行项目测试

    Args:
        test_file: 测试文件路径(可选)

    Returns:
        测试结果
    """
    logger.info("启动 AI Quant 项目测试")

    try:
        # 创建测试套件
        if test_file:
            suite = unittest.TestLoader().discover(
                os.path.dirname(os.path.abspath(test_file)),
                os.path.basename(test_file)
            )
        else:
            suite = unittest.TestLoader().discover(
                os.path.join(os.path.dirname(os.path.dirname(
                    os.path.abspath(__file__))), "..", "script"),
                "test_*.py"
            )

        # 运行测试
        runner = unittest.TextTestRunner(verbosity=2)
        result = runner.run(suite)

        if result.wasSuccessful():
            logger.info("所有测试成功通过")
            return 0
        else:
            logger.error(
                f"测试失败: {len(result.failures)} 个失败, {len(result.errors)} 个错误")
            return 1
    except Exception as e:
        logger.error(f"测试过程中出错: {e}")
        logger.exception("详细错误信息:")
        return 2


if __name__ == "__main__":
    import argparse

    # 解析命令行参数
    parser = argparse.ArgumentParser(
        description="AI Quant 项目测试程序"
    )
    parser.add_argument(
        "--test-file",
        help="指定测试文件路径"
    )

    args = parser.parse_args()

    # 运行测试
    sys.exit(run_tests(args.test_file))