You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by GitBox <gi...@apache.org> on 2022/08/02 15:11:49 UTC

[GitHub] [kafka] divijvaidya commented on a diff in pull request #11137: KAFKA-13133 Replace EasyMock and PowerMock with Mockito for AbstractHerderTest

divijvaidya commented on code in PR #11137:
URL: https://github.com/apache/kafka/pull/11137#discussion_r935719219


##########
connect/runtime/src/test/java/org/apache/kafka/connect/runtime/AbstractHerderTest.java:
##########
@@ -135,90 +133,75 @@
     private final int generation = 5;
     private final String connector = "connector";
     private final ConnectorClientConfigOverridePolicy noneConnectorClientConfigOverridePolicy = new NoneConnectorClientConfigOverridePolicy();
+    private Connector insConnector;
 
-    @MockStrict private Worker worker;
-    @MockStrict private WorkerConfigTransformer transformer;
-    @MockStrict private Plugins plugins;
-    @MockStrict private ClassLoader classLoader;
-    @MockStrict private ConfigBackingStore configStore;
-    @MockStrict private StatusBackingStore statusStore;
+    private final Worker worker = mock(Worker.class);
+    private final WorkerConfigTransformer transformer = mock(WorkerConfigTransformer.class);
+    private final Plugins plugins = mock(Plugins.class);
+    private final ClassLoader classLoader = mock(ClassLoader.class);
+    private final ConfigBackingStore configStore = mock(ConfigBackingStore.class);
+    private final StatusBackingStore statusStore = mock(StatusBackingStore.class);
+    private ClassLoader loader;
+
+    @Before
+    public void before() {
+        loader = Utils.getContextOrKafkaClassLoader();
+    }
+
+    @After
+    public void tearDown() {
+        if (loader != null) Plugins.compareAndSwapLoaders(loader);
+    }
 
     @Test
     public void testConnectors() {
-        AbstractHerder herder = partialMockBuilder(AbstractHerder.class)
-            .withConstructor(
-                Worker.class,
-                String.class,
-                String.class,
-                StatusBackingStore.class,
-                ConfigBackingStore.class,
-                ConnectorClientConfigOverridePolicy.class
-            )
-            .withArgs(worker, workerId, kafkaClusterId, statusStore, configStore, noneConnectorClientConfigOverridePolicy)
-            .addMockedMethod("generation")
-            .createMock();
-
-        EasyMock.expect(herder.generation()).andStubReturn(generation);
-        EasyMock.expect(herder.rawConfig(connector)).andReturn(null);
-        EasyMock.expect(configStore.snapshot()).andReturn(SNAPSHOT);
-        replayAll();
+        AbstractHerder herder = mock(AbstractHerder.class, withSettings()
+                .useConstructor(worker, workerId, kafkaClusterId, statusStore, configStore, noneConnectorClientConfigOverridePolicy)
+                .defaultAnswer(CALLS_REAL_METHODS));
+
+        when(herder.generation()).thenReturn(generation);
+        when(herder.rawConfig(connector)).thenReturn(null);

Review Comment:
   You are right @mimaison here and in your other comments about extra stubbing. When we run the test with `@RunWith(MockitoJUnitRunner.class)` which implicitly verifies that each mock is being invoked, the test fails.
   ```
   Unnecessary stubbings detected in test class: AbstractHerderTest
   Clean & maintainable test code requires zero unnecessary code.
   Following stubbings are unnecessary (click to navigate to relevant line of code):
     1. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.createConfigValidationHerder(AbstractHerderTest.java:880)
     2. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testConnectors(AbstractHerderTest.java:165)
     3. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testConnectors(AbstractHerderTest.java:166)
     4. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testBuildRestartPlanForUnknownConnector(AbstractHerderTest.java:255)
     5. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testConnectorStatus(AbstractHerderTest.java:179)
     6. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.connectorStatus(AbstractHerderTest.java:198)
     7. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.connectorStatus(AbstractHerderTest.java:207)
     8. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testBuildRestartPlanForConnectorAndTasks(AbstractHerderTest.java:278)
     9. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testBuildRestartPlanForConnectorAndTasks(AbstractHerderTest.java:286)
     10. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testBuildRestartPlanForNoRestart(AbstractHerderTest.java:314)
     11. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testBuildRestartPlanForNoRestart(AbstractHerderTest.java:322)
   Please remove unnecessary stubbings or use 'lenient' strictness. More info: javadoc for UnnecessaryStubbingException class.
   org.mockito.exceptions.misusing.UnnecessaryStubbingException: 
   Unnecessary stubbings detected in test class: AbstractHerderTest
   Clean & maintainable test code requires zero unnecessary code.
   Following stubbings are unnecessary (click to navigate to relevant line of code):
     1. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.createConfigValidationHerder(AbstractHerderTest.java:880)
     2. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testConnectors(AbstractHerderTest.java:165)
     3. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testConnectors(AbstractHerderTest.java:166)
     4. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testBuildRestartPlanForUnknownConnector(AbstractHerderTest.java:255)
     5. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testConnectorStatus(AbstractHerderTest.java:179)
     6. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.connectorStatus(AbstractHerderTest.java:198)
     7. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.connectorStatus(AbstractHerderTest.java:207)
     8. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testBuildRestartPlanForConnectorAndTasks(AbstractHerderTest.java:278)
     9. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testBuildRestartPlanForConnectorAndTasks(AbstractHerderTest.java:286)
     10. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testBuildRestartPlanForNoRestart(AbstractHerderTest.java:314)
     11. -> at org.apache.kafka.connect.runtime.AbstractHerderTest.testBuildRestartPlanForNoRestart(AbstractHerderTest.java:322)
   Please remove unnecessary stubbings or use 'lenient' strictness. More info: javadoc for UnnecessaryStubbingException class.
   	at app//org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:53)
   	at app//org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:163)
   	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
   	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
   	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
   	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
   	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
   	at java.base@11.0.14/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   	at java.base@11.0.14/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   	at java.base@11.0.14/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   	at java.base@11.0.14/java.lang.reflect.Method.invoke(Method.java:566)
   	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
   	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
   	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
   	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
   	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
   	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
   	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
   	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
   	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
   	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
   	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
   	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
   	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
   	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
   ```
   
   I am submitting a new PR containing commits from this PR. I will ensure that your comments are addressed there.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: jira-unsubscribe@kafka.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org