【发布时间】:2017-09-18 16:01:41
【问题描述】:
我有以下测试代码:
herder = PowerMock.createPartialMock(DistributedHerder.class, new String[]{"backoff", "updateDeletedConnectorStatus"},
new DistributedConfig(HERDER_CONFIG), worker, WORKER_ID, statusBackingStore, configBackingStore, member, MEMBER_URL, time);
configUpdateListener = herder.new ConfigUpdateListener();
rebalanceListener = herder.new RebalanceListener();
plugins = PowerMock.createMock(Plugins.class);
EasyMock.expect(worker.getPlugins()).andReturn(plugins);
EasyMock.expect(herder.connectorType(CONN1)).andReturn(ConnectorType.SOURCE).anyTimes();
connectorType() 方法在 DistributedHerder 的基类 AbstractHerder 中定义。 由于 herder 是从 DistributedHerder 创建的,easy mock 找不到 AbstractHerder 类的 mock,导致 NPE:
org.apache.kafka.connect.runtime.distributed.DistributedHerderTest > testInconsistentConfigs FAILED
java.lang.NullPointerException
at org.apache.kafka.connect.runtime.AbstractHerder.getConnector(AbstractHerder.java:342)
at org.apache.kafka.connect.runtime.distributed.DistributedHerder$$EnhancerByCGLIB$$af0dd240.CGLIB$getConnector$39(<generated>)
at org.apache.kafka.connect.runtime.distributed.DistributedHerder$$EnhancerByCGLIB$$af0dd240$$FastClassByCGLIB$$8c31132d.invoke(<generated>)
at org.easymock.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.easymock.internal.ClassProxyFactory$MockMethodInterceptor.intercept(ClassProxyFactory.java:92)
at org.apache.kafka.connect.runtime.distributed.DistributedHerder$$EnhancerByCGLIB$$af0dd240.getConnector(<generated>)
at org.apache.kafka.connect.runtime.AbstractHerder.connectorType(AbstractHerder.java:349)
at org.apache.kafka.connect.runtime.distributed.DistributedHerder$$EnhancerByCGLIB$$af0dd240.CGLIB$connectorType$23(<generated>)
at org.apache.kafka.connect.runtime.distributed.DistributedHerder$$EnhancerByCGLIB$$af0dd240$$FastClassByCGLIB$$8c31132d.invoke(<generated>)
at org.easymock.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.easymock.internal.ClassProxyFactory$MockMethodInterceptor.intercept(ClassProxyFactory.java:92)
at org.apache.kafka.connect.runtime.distributed.DistributedHerder$$EnhancerByCGLIB$$af0dd240.connectorType(<generated>)
at org.apache.kafka.connect.runtime.distributed.DistributedHerderTest.setUp(DistributedHerderTest.java:179)
欢迎任何提示。
【问题讨论】:
-
你在哪里打电话给
replyherder?
标签: java unit-testing easymock