48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
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() |