Github user srdo commented on a diff in the pull request:
https://github.com/apache/storm/pull/2790#discussion_r207515186
--- Diff:
external/storm-kafka-client/src/test/java/org/apache/storm/kafka/bolt/KafkaBoltTest.java
---
@@ -37,38 +39,48 @@
import org.apache.storm.tuple.Tuple;
import org.junit.Test;
import org.mockito.ArgumentMatcher;
+import org.mockito.internal.util.MockUtil;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class KafkaBoltTest {
private static final Logger LOG =
LoggerFactory.getLogger(KafkaBoltTest.class);
-
+
@SuppressWarnings({ "unchecked", "serial" })
- @Test
- public void testSimple() {
- final KafkaProducer<String, String> producer =
mock(KafkaProducer.class);
- when(producer.send(any(), any())).thenAnswer(new Answer<Object>() {
+ private <K, V> KafkaBolt<K, V> makeBolt(KafkaProducer<K, V>
mockProducer) {
+ Validate.isTrue(MockUtil.isMock(mockProducer), "KafkaProducer
should be a mock object.");
+ when(mockProducer.send(any(), any())).thenAnswer(new
Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws
Throwable {
Callback c = (Callback)invocation.getArguments()[1];
c.onCompletion(null, null);
return null;
}
});
- KafkaBolt<String, String> bolt = new KafkaBolt<String, String>() {
+ KafkaBolt<K, V> bolt = new KafkaBolt<K, V>() {
@Override
- protected KafkaProducer<String, String> mkProducer(Properties
props) {
- return producer;
+ protected KafkaProducer<K, V> mkProducer(Properties props) {
+ return mockProducer;
}
};
bolt.withTopicSelector("MY_TOPIC");
-
+
+ return bolt;
+ }
+
+ @SuppressWarnings({ "unchecked", "serial" })
+ @Test
+ public void testSimple() {
+ final KafkaProducer<String, String> producer =
mock(KafkaProducer.class);
--- End diff --
I'm wondering if we would be better off using
https://kafka.apache.org/10/javadoc/org/apache/kafka/clients/producer/MockProducer.html?
Our own stubbing ends up doing some weird things, e.g. returning null from
`send`.
---