如何为一个执行发送 - 接收操作的方法编写单元测试,以便与通用设备进行通信?
在以下示例中,为了查询串行设备(MyDevice.Read
方法),将以特定方式格式化的字符串发送到设备,并且设备根据发送的消息以特定字符串进行响应。 / p>
这是模拟串口所需的接口:
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);
}
}
这是我写的Read方法的单元测试(故意/异常测试被遗漏):
[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...
}
...
}
另一个疑问:为了检查是否应该使用特定参数调用方法,编写测试是否正确?
答案 0 :(得分:1)
这是对这种设备进行“单元测试”的好方法。除非您想要连接真实设备或模拟设备。
你应该保持每个测试的简单性和重点 - 即当测试读取时返回预期的字符串(没有别的)并检查系统行为,写入时验证是否使用完全字符串调用了写入。