import pytest from src.features import ( TransactionFeatures, EvaluationResult, ExplanationResult, ActionPlan, DecisionResult, ModelMetrics, TrainingResult, TransactionClass, ConfidenceLevel, Priority, FeatureContribution, Action ) def test_transaction_features(): features = TransactionFeatures( time=0.0, v1=-1.36, v2=-0.07, v3=2.54, v4=1.38, v5=-0.34, v6=0.46, v7=0.24, v8=0.10, v9=0.36, v10=0.09, v11=-0.55, v12=-0.62, v13=-0.99, v14=-0.31, v15=1.47, v16=-0.47, v17=0.21, v18=0.03, v19=0.40, v20=0.25, v21=-0.02, v22=0.28, v23=-0.11, v24=0.07, v25=0.13, v26=-0.19, v27=0.13, v28=-0.02, amount=149.62 ) assert features.time == 0.0 assert features.amount == 149.62 assert len(features.to_array()) == 30 def test_evaluation_result(): result = EvaluationResult( predicted_class=1, class_name=TransactionClass.FRAUD, fraud_probability=0.95, normal_probability=0.05, confidence=ConfidenceLevel.HIGH ) assert result.predicted_class == 1 assert result.class_name == TransactionClass.FRAUD assert result.fraud_probability == 0.95 assert result.confidence == ConfidenceLevel.HIGH def test_feature_contribution(): contribution = FeatureContribution( feature_name="V14", value=-0.99, importance=0.15, contribution=-0.15, impact="负" ) assert contribution.feature_name == "V14" assert contribution.value == -0.99 assert contribution.importance == 0.15 assert contribution.impact == "负" def test_explanation_result(): explanation = ExplanationResult( model_type="RandomForestClassifier", predicted_class=TransactionClass.FRAUD, key_features=[], overall_explanation="测试解释" ) assert explanation.model_type == "RandomForestClassifier" assert explanation.predicted_class == TransactionClass.FRAUD def test_action(): action = Action( priority=Priority.URGENT, action="冻结账户", reason="检测到欺诈" ) assert action.priority == Priority.URGENT assert action.action == "冻结账户" def test_action_plan(): plan = ActionPlan( predicted_class=TransactionClass.FRAUD, confidence=ConfidenceLevel.HIGH, actions=[] ) assert plan.predicted_class == TransactionClass.FRAUD assert plan.confidence == ConfidenceLevel.HIGH def test_decision_result(): result = DecisionResult( evaluation=EvaluationResult( predicted_class=1, class_name=TransactionClass.FRAUD, fraud_probability=0.95, normal_probability=0.05, confidence=ConfidenceLevel.HIGH ), explanation=ExplanationResult( model_type="RandomForestClassifier", predicted_class=TransactionClass.FRAUD, key_features=[], overall_explanation="测试" ), action_plan=ActionPlan( predicted_class=TransactionClass.FRAUD, confidence=ConfidenceLevel.HIGH, actions=[] ), timestamp="2026-01-15" ) assert result.evaluation.predicted_class == 1 assert result.explanation.model_type == "RandomForestClassifier" assert result.action_plan.predicted_class == TransactionClass.FRAUD def test_model_metrics(): metrics = ModelMetrics( accuracy=0.95, precision=0.90, recall=0.85, f1_score=0.87, pr_auc=0.92 ) assert metrics.accuracy == 0.95 assert metrics.precision == 0.90 assert metrics.pr_auc == 0.92 def test_training_result(): result = TrainingResult( model_name="random_forest", metrics=ModelMetrics( accuracy=0.95, precision=0.90, recall=0.85, f1_score=0.87, pr_auc=0.92 ), confusion_matrix=[[100, 5], [10, 85]] ) assert result.model_name == "random_forest" assert result.metrics.accuracy == 0.95