Ich mag die Abhängigkeit in Konstruktor initialisiert verspotten, in meinem Fall habe ich Kafka Produzenten verspotten will, so dass ich das Versenden von Nachrichten über kafka spotten kann, sieht mein Code wie folgt:Mocking Abhängigkeit im Konstruktor initialisiert
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);
}
Kann mir bitte jemand vorschlagen, wie dies erreicht werden kann.
Ändern Sie es, so dass der KafkaProducer ein Parameter ist? – immibis
Ich stimme zu, dass getan werden kann, aber ich möchte nicht die Klassenstruktur ändern. – Apollo
Folgen Sie einfach dem ersten Rat von Vooks. Je nach zugrunde liegendem Framework kann es auch möglich sein, ein Framework/Annotation-Tool zu verwenden, um den Producer in die zu testende Klasse zu bringen. In der Regel möchten Sie https://www.youtube.com/playlist?list=PLD0011D00849E1B79 sehen ... gibt Ihnen eine ziemlich gute Idee, wie Sie testbaren Code schreiben. – GhostCat