各位好:
在网络上有看到关于串行通讯用Mock测试,
程式码如下。
范例主程式
public interface ISerialPort
{
void WriteLine(string text);
void ReadLine(string text);
}
public class MyDevice
{
private ISerialPort _port;
public MyDevice(ISerialPort port)
{
_port = port;
}
public DeviceResponse Read(...)
{
_port.WriteLine(...);
string response = _port.ReadLine();
// Parse the response.
return new DeviceResponse(response);
}
}
范例单元测试
[TestClass]
public class MyDeviceTests
{
[TestMethod]
public void Read_CheckWriteLineIsCalledWithAppropriateString()
{
Mock<ISerialPort> port = new Mock<ISerialPort>();
MyDevice device = new MyDevice(port.Object);
device.Read(...);
port.Verify(p => p.WriteLine("SpecificString"));
}
[TestMethod]
public void Read_DeviceRespondsCorrectly()
{
Mock<ISerialPort> port = new Mock<ISerialPort>();
MyDevice device = new MyDevice(port.Object);
port.Setup(p => p.ReadLine()).Returns("SomeStringFromDevice");
DeviceResponse response = device.Read(...);
// Asserts here...
}
...
}
单元测试是使用Mock,就是假定有连到串行埠,去吐资料回来。
可是这份程式,看起来要连接实体的Comport好像不行。
SerialPort My_SerialPort;
My_SerialPort = new My_SerialPort($"COM1", BaudRate);
My_SerialPort.Open();
想请问说要怎修改才能够连接到网络程式码的ISerialPort
传入到主程式,可是做通讯也可以做Mock单元测试。
如有问题,在烦请各位请教
谢谢