import unittest from unittest.mock import patch, MagicMock import sys import os # 添加src目录到Python路径 sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', 'src')) from src.divices.relay import RelayController class TestRelayController(unittest.TestCase): def setUp(self): self.relay = RelayController('192.168.0.18', 50000) self.relay.set_device_mapping({ 'door_upper': 0, 'door_lower_1': 1, 'door_lower_2': 2, 'break_arch_upper': 3, 'break_arch_lower': 4 }) @patch('devices.relay.socket.socket') def test_send_command_success(self, mock_socket): # 模拟成功的socket通信 mock_socket_instance = MagicMock() mock_socket.return_value.__enter__.return_value = mock_socket_instance mock_socket_instance.recv.return_value = b'\x00\x00\x00\x00\x00\x06\x01\x05\x00\x00\xff\x00' result = self.relay.send_command('00000000000601050000FF00') self.assertIsNotNone(result) def test_control_valid_device_and_action(self): with patch.object(self.relay, 'send_command') as mock_send: mock_send.return_value = b'some_response' result = self.relay.control('door_upper', 'open') self.assertTrue(result) def test_control_invalid_device(self): with patch.object(self.relay, 'send_command') as mock_send: result = self.relay.control('invalid_device', 'open') self.assertFalse(result) mock_send.assert_not_called() if __name__ == '__main__': unittest.main()