【发布时间】:2018-07-17 13:49:37
【问题描述】:
我正在尝试测试使用 MQTT 客户端的 Spring-Boot 应用程序。我想测试几个类似这些区域的属性:
- 是否正确处理连接失败
- 是否正确处理连接成功
- 是否正确解析消息负载(json?)
- 它是否正确处理格式错误的负载。
所以,我的 MQTT 客户端代码是(简化的):
@Component
public class MQTTController implements MqttCallback {
MqttClient client;
@Value("${spring.mqtt.serverURI}")
private String serverURI;
@Value("${spring.mqtt.port}")
private String serverPort;
@Bean
private MqttClient receiveData() {
try{
client = new MqttClient(serverURI + ":" + serverPort, "Receiver");
client.connect();
client.setCallback(this);
client.subscribe("someTopic");
return client;
}
catch(Exception e){
log.error("MQTT ERROR");
log.error(e.toString());
}
return null;
}
public void connectionLost(Throwable cause) {
}
public void messageArrived(String topic, MqttMessage message) throws Exception {
someActionWithTheData(message.ToString());
}
public void deliveryComplete(IMqttDeliveryToken token) {
}
}
主要问题是在测试期间,我没有 MQTT Broker。我的代理只能在 docker 容器上使用,我必须在不使用它的情况下测试这个类。
我在 mqtt 包org.eclipse.paho.client.mqttv3 中搜索了一些用于测试的嵌入式代理,但我一无所获。而且我不想仅仅为了一个单元测试向我的项目添加另一个依赖项。
那么,有没有一种方法可以在不向 MQTT 代理添加依赖项的情况下测试此类?如果没有,最简单的方法是什么?
【问题讨论】:
标签: java unit-testing spring-boot mqtt