You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
3.8 KiB

  1. using DryIoc;
  2. using Microsoft.EntityFrameworkCore;
  3. using ModbusDemo.Device;
  4. using ModbusDemo.Model;
  5. using Moq;
  6. using Prism.Ioc;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.IO.Ports;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace ModbusTest
  14. {
  15. public class ModbusRTUTest
  16. {
  17. //设计缺陷,应该使用适配器模式重写SerialPort
  18. private SerialPort _serialport;
  19. private Mock<ModbusDbContext> _mockDbContext;
  20. private ModbusRTU _modbusRtu;
  21. [SetUp]
  22. public void Setup()
  23. {
  24. _serialport = new SerialPort();
  25. _serialport.PortName = "COM3";
  26. _serialport.DataBits = 8;
  27. _serialport.BaudRate = 9600;
  28. _serialport.Parity = Parity.Even;
  29. _serialport.StopBits = StopBits.One;
  30. _serialport.ReadTimeout = 500;
  31. _serialport.WriteTimeout = 500;
  32. _serialport.Open();
  33. _mockDbContext = new Mock<ModbusDbContext>();
  34. _modbusRtu = new ModbusRTU(_serialport, _mockDbContext.Object);
  35. }
  36. [TearDown]
  37. public void TearDown()
  38. {
  39. // 确保在测试结束后释放资源
  40. _serialport.Dispose();
  41. }
  42. /// <summary>
  43. /// 测试线圈读取
  44. /// </summary>
  45. [Test]
  46. public void ReadCoil1()
  47. {
  48. var result = _modbusRtu.ReadCoil(1, 300, 5);
  49. // 创建包含5个true的预期数组
  50. var expected = new bool[5];
  51. Array.Fill(expected, false);
  52. CollectionAssert.AreEqual(expected, result);
  53. }
  54. [Test]
  55. public void ReadCoil2()
  56. {
  57. var result = _modbusRtu.ReadCoil(1, 305, 5);
  58. // 创建包含5个flase的预期数组
  59. var expected = new bool[5];
  60. Array.Fill(expected, true);
  61. CollectionAssert.AreEqual(expected, result);
  62. }
  63. [Test]
  64. public void WriteCoil1()
  65. {
  66. var data = new bool[5];
  67. Array.Fill(data, true);
  68. _modbusRtu.WriteCoil(1, 310, data);
  69. // 创建包含5个true的预期数组
  70. var expected = _modbusRtu.ReadCoil(1, 310, 5);
  71. CollectionAssert.AreEqual(data, expected);
  72. }
  73. [Test]
  74. public void WriteCoil2()
  75. {
  76. var data = new bool[5];
  77. Array.Fill(data, false);
  78. _modbusRtu.WriteCoil(1, 315, data);
  79. // 创建包含5个flase的预期数组
  80. var expected = _modbusRtu.ReadCoil(1, 315, 5);
  81. CollectionAssert.AreEqual(data, expected);
  82. }
  83. [Test]
  84. public void ReadRegister1()
  85. {
  86. ushort[] data = new ushort[5];
  87. Array.Fill(data, (ushort)0);
  88. var expected = _modbusRtu.ReadRegisters(1, 300, 5);
  89. CollectionAssert.AreEqual(data, expected);
  90. }
  91. [Test]
  92. public void ReadRegister2()
  93. {
  94. ushort[] data = new ushort[5];
  95. Array.Fill(data, (ushort)1);
  96. var expected = _modbusRtu.ReadRegisters(1, 305, 5);
  97. CollectionAssert.AreEqual(data, expected);
  98. }
  99. [Test]
  100. public void WriteRegister1()
  101. {
  102. ushort[] data = new ushort[5];
  103. Array.Fill(data, (ushort)1);
  104. _modbusRtu.WriteRegisters(1, 310, data);
  105. var expected = _modbusRtu.ReadRegisters(1, 310, 5);
  106. CollectionAssert.AreEqual(data, expected);
  107. }
  108. [Test]
  109. public void WriteRegister2()
  110. {
  111. ushort[] data = new ushort[5];
  112. Array.Fill(data, (ushort)2);
  113. _modbusRtu.WriteRegisters(1, 315, data);
  114. var expected = _modbusRtu.ReadRegisters(1, 315, 5);
  115. CollectionAssert.AreEqual(data, expected);
  116. }
  117. }
  118. }