【发布时间】:2017-05-08 22:00:21
【问题描述】:
我创建了一个从JSSC library 扩展的类,它使用低级通信方法(sendByte、sendString 等)。我想通过 JUnit 对其进行测试,但我不太知道该怎么做。
例如,我们看看下面的方法:
public void openConnection() throws SerialPortException {
serialPort.openPort();
configureConnectionParameters(serialPort);
configureReadListener(serialPort);
}
为了确保方法正常工作,我需要一个实际的硬件设备来查看端口是否正确打开,并且在配置过程中没有抛出异常。但是在单元测试期间使用外部资源通常被认为是一种不好的做法,所以我开始想知道是否有解决此类问题的方法(可能是模拟硬件?)。
或者,我必须对它进行单元测试吗?
【问题讨论】:
-
有一些模拟库就是为了这个目的。 jmockit.org 是我在工作中使用最多的一个;还有 Mockito、PowerMock。
-
您应该考虑首先为 SerialPort、ISerialPort 创建一个接口,然后从您的单元测试程序中对其进行模拟,最后在测试时使用依赖注入将您的模拟注入到您的类中。
-
感谢您的回复,但要么我不正确理解模拟机制,要么我真的不能在这里使用它。
openConnection在自身内部使用SerialPort对象,所以我应该如何模拟它我不能修改测试方法,只能修改周围环境? -
您必须将它作为依赖项传递给您的类。请参阅我的答案中的示例。