我创建了一个从JSSC library扩展的类,它使用低级通信方法(sendByte,sendString等).我想通过JUnit测试它,但我不知道该怎么做.
例如,让我们看看下面的方法:
public void openConnection() throws SerialPortException {
serialPort.openPort();
configureConnectionParameters(serialPort);
configureReadListener(serialPort);
}
为了确保方法正常工作,我需要一个实际的硬件设备来查看端口是否正确打开,并且在配置过程中没有抛出异常.但是在单元测试期间使用外部资源通常被认为是一种不好的做法,所以我开始想知道是否有任何解决这些问题的方法(可能会嘲笑硬件?).
或者,我是否必须进行单元测试?
解决方法:
您应该更改类的结构并注入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);
}
[...]
}
@Test
public void testShouldOpenPortOnOpenConnection()
throws Exception {
SerialPort mockedPort = mock(SerialPort.class);
PortHandler portHandler = new PortHandler(mockedPort);
portHandler.openConnection();
verify(mockedPort, times(1)).openPort();
}
资源:
>示例中使用的模拟框架:Mockito