not*_*lty 4 java hardware testing
我创建了一个从JSSC库扩展的类,该类使用低级通信方法(sendByte,sendString等)。我想通过JUnit对其进行测试,但我不太了解该怎么做。
例如,让我们看一下下面的方法:
public void openConnection() throws SerialPortException {
serialPort.openPort();
configureConnectionParameters(serialPort);
configureReadListener(serialPort);
}
Run Code Online (Sandbox Code Playgroud)
为了确保该方法正常工作,我需要一个实际的硬件设备来查看端口是否正确打开,并且在配置过程中没有引发任何异常。但是通常在单元测试期间使用外部资源被认为是一种不好的做法,因此我开始怀疑是否有解决此类问题的解决方案(可能是模拟硬件?)。
或者,我是否必须对它进行单元测试?
您可能应该更改类的结构并注入serialPort。
这样,您可以在单元测试期间模拟注入的串行端口,并另外创建具有更少隐藏依赖性的更简洁的代码。
public class PortHandler {
private final SerialPort serialPort;
public PortHandler(SerialPort serialPort) {
this.serialPort = serialPort;
}
[...]
public void openConnection() throws SerialPortException {
serialPort.openPort();
configureConnectionParameters(serialPort);
configureReadListener(serialPort);
}
[...]
}
Run Code Online (Sandbox Code Playgroud)
@Test
public void testShouldOpenPortOnOpenConnection()
throws Exception {
SerialPort mockedPort = mock(SerialPort.class);
PortHandler portHandler = new PortHandler(mockedPort);
portHandler.openConnection();
verify(mockedPort, times(1)).openPort();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |