我想模拟在构造函数中初始化的依赖项,在我的例子中,我想模拟kafka producer,这样我就可以模拟通过kafka发送消息,我的代码如下所示:
private Producer<String, String> producer;
private int messageTimeOut;
private String topicName;
@Autowired
public classConstructor(@Value("${bootstrap.servers}") String bootstrapServers,
@Value("${topic.name}") String topicName, @Value("${message.send.timeout}") int messageTimeOut) {
this.messageTimeOut = messageTimeOut;
this.topicName = topicName;
Properties props = new Properties();
props.put("bootstrap.servers", bootstrapServers);
props.put("key.serializer", StringSerializer.class.getName());
props.put("value.serializer", StringSerializer.class.getName());
props.put("acks", "all");
producer = new KafkaProducer<>(props);
}
有谁能建议如何做到这一点吗。
2条答案
按热度按时间uz75evzq1#
我想你可以用powermock。它允许在示例化时返回自定义对象。像这样:
px9o7tmv2#
无法模拟构造函数创建的对象。理想情况下,在创建类时,不应该示例化要模拟的类。无论如何,有几个解决办法来实现这一点。
将kafkaproducer作为构造函数中的参数传递。
添加一个setkafkaproducer方法以仅用于单元测试,并将mock对象设置到类中。
使用反射设置私有字段http://www.java2s.com/code/java/reflection/setprivatefieldvalue.htm