""" RouterAgent单元测试 """ import pytest from gfa_core.mas.agents.router import RouterAgent from gfa_core.mas.agents.base import AgentState, AgentMessage, QueryMode @pytest.mark.unit class TestRouterAgent: """测试RouterAgent""" @pytest.fixture def router_agent(self, mock_llm_manager): """创建RouterAgent实例""" return RouterAgent(mock_llm_manager) @pytest.fixture def sample_message(self): """示例消息""" return AgentMessage( sender="user", receiver="router", message_type="request", payload={"query": "帮我分析拟南芥SPL基因家族"} ) @pytest.fixture def sample_state(self): """示例状态""" return AgentState(session_id="test_session_001") def test_agent_initialization(self, router_agent): """测试Agent初始化""" assert router_agent.name == "router" assert router_agent.role == "Intent Router" def test_build_system_prompt(self, router_agent): """测试系统提示词加载""" prompt = router_agent._build_system_prompt() assert len(prompt) > 1000 # 提示词应该很长 assert "RouterAgent" in prompt or "router" in prompt.lower() @pytest.mark.asyncio async def test_execute_analysis_intent(self, router_agent, sample_state, sample_message): """测试分析意图识别""" result = await router_agent.execute(sample_state, sample_message) assert result.mode == QueryMode.ANALYSIS assert result.session_id == "test_session_001" assert len(result.messages) > 0 @pytest.mark.asyncio async def test_execute_faq_intent(self, router_agent, sample_state): """测试FAQ意图识别""" message = AgentMessage( sender="user", receiver="router", message_type="request", payload={"query": "什么是SPL基因家族?"} ) result = await router_agent.execute(sample_state, message) assert result.mode == QueryMode.FAQ def test_rule_based_classify_analysis(self, router_agent): """测试规则分类-分析模式""" mode, confidence = router_agent._rule_based_classify("帮我分析基因家族") assert mode == QueryMode.ANALYSIS assert confidence > 0.8 def test_rule_based_classify_faq(self, router_agent): """测试规则分类-FAQ模式""" mode, confidence = router_agent._rule_based_classify("什么是基因家族") assert mode == QueryMode.FAQ assert confidence > 0.7 def test_extract_params(self, router_agent): """测试参数提取""" text = "分析拟南芥SPL基因家族" params = router_agent._extract_params(text) assert params.get("family") == "SPL" assert params.get("species") == "Arabidopsis"