using DryIoc; using Microsoft.EntityFrameworkCore; using ModbusDemo.Device; using ModbusDemo.Model; using Moq; using Prism.Ioc; using System; using System.Collections.Generic; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ModbusTest { public class ModbusRTUTest { //设计缺陷,应该使用适配器模式重写SerialPort private SerialPort _serialport; private Mock _mockDbContext; private ModbusRTU _modbusRtu; [SetUp] public void Setup() { _serialport = new SerialPort(); _serialport.PortName = "COM3"; _serialport.DataBits = 8; _serialport.BaudRate = 9600; _serialport.Parity = Parity.Even; _serialport.StopBits = StopBits.One; _serialport.ReadTimeout = 500; _serialport.WriteTimeout = 500; _serialport.Open(); _mockDbContext = new Mock(); _modbusRtu = new ModbusRTU(_serialport, _mockDbContext.Object); } [TearDown] public void TearDown() { // 确保在测试结束后释放资源 _serialport.Dispose(); } /// /// 测试线圈读取 /// [Test] public void ReadCoil1() { var result = _modbusRtu.ReadCoil(1, 300, 5); // 创建包含5个true的预期数组 var expected = new bool[5]; Array.Fill(expected, false); CollectionAssert.AreEqual(expected, result); } [Test] public void ReadCoil2() { var result = _modbusRtu.ReadCoil(1, 305, 5); // 创建包含5个flase的预期数组 var expected = new bool[5]; Array.Fill(expected, true); CollectionAssert.AreEqual(expected, result); } [Test] public void WriteCoil1() { var data = new bool[5]; Array.Fill(data, true); _modbusRtu.WriteCoil(1, 310, data); // 创建包含5个true的预期数组 var expected = _modbusRtu.ReadCoil(1, 310, 5); CollectionAssert.AreEqual(data, expected); } [Test] public void WriteCoil2() { var data = new bool[5]; Array.Fill(data, false); _modbusRtu.WriteCoil(1, 315, data); // 创建包含5个flase的预期数组 var expected = _modbusRtu.ReadCoil(1, 315, 5); CollectionAssert.AreEqual(data, expected); } [Test] public void ReadRegister1() { ushort[] data = new ushort[5]; Array.Fill(data, (ushort)0); var expected = _modbusRtu.ReadRegisters(1, 300, 5); CollectionAssert.AreEqual(data, expected); } [Test] public void ReadRegister2() { ushort[] data = new ushort[5]; Array.Fill(data, (ushort)1); var expected = _modbusRtu.ReadRegisters(1, 305, 5); CollectionAssert.AreEqual(data, expected); } [Test] public void WriteRegister1() { ushort[] data = new ushort[5]; Array.Fill(data, (ushort)1); _modbusRtu.WriteRegisters(1, 310, data); var expected = _modbusRtu.ReadRegisters(1, 310, 5); CollectionAssert.AreEqual(data, expected); } [Test] public void WriteRegister2() { ushort[] data = new ushort[5]; Array.Fill(data, (ushort)2); _modbusRtu.WriteRegisters(1, 315, data); var expected = _modbusRtu.ReadRegisters(1, 315, 5); CollectionAssert.AreEqual(data, expected); } } }