gpt4 book ai didi

java - 如何为使用硬件资源的类编写单元测试?

转载 作者:搜寻专家 更新时间:2023-11-01 02:21:20 24 4
gpt4 key购买 nike

我创建了一个扩展自 JSSC library 的类并使用低级通信方法(sendByte、sendString 等)。我想通过 JUnit 对其进行测试,但我不太清楚该怎么做。

例如,让我们看一下下面的方法:

public void openConnection() throws SerialPortException {
serialPort.openPort();
configureConnectionParameters(serialPort);
configureReadListener(serialPort);
}

为确保该方法正常工作,我需要一个实际的硬件设备来查看端口是否正确打开以及在配置过程中是否没有抛出异常。但是在单元测试期间使用外部资源通常被认为是一种不好的做法,所以我开始想知道是否有解决此类问题的方法(也许是模拟硬件?)。

或者,我是否必须对它进行单元测试?

最佳答案

您可能应该更改类的结构并注入(inject) serialPort

通过这种方式,您可以在单元测试期间模拟注入(inject)的串行端口,并额外创建一个更清晰的代码,隐藏的依赖性更少。

示例:

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

关于java - 如何为使用硬件资源的类编写单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41297336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com