2017-09-18 2 views
0

Ich habe folgenden Testcode:Mock Basisklassenmethode mit EasyMock

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(); 

wo Connector() Methode in AbstractHerder definiert ist, Basisklasse DistributedHerder. Da die herder weg von DistributedHerder erstellt wird, ist einfach Mock nicht Mock für AbstractHerder Klasse finden, zu NPE führend:

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) 

Jeder Hinweis ist willkommen.

+0

Wo rufst du 'reply' auf' herder' an? – tsolakp

Antwort

0

Ich bin hier ein wenig verloren, werde aber trotzdem versuchen, einige Hinweise auf sokratische Fragen zu geben.

  • Warum benötigen Sie PowerMock für DistributedHerder? Es sieht aus wie eine normale teilweise spöttisch
  • Und warum PowerMock für Plugins anstelle von einfachen EasyMock?
  • Haben Sie den PowerMock-Läufer konfiguriert?
  • Was ist herder.new ConfigUpdateListener()? Welche Sprache ist das?
  • Was ist worker?
  • Ich sehe keine replay() in der Tat. Können wir den vollständigen Code haben?
  • Für backoff und updateDeletedConnectorStatus ist nichts aufgezeichnet. Ist das normal? In Ihrem Fall scheint die Methode plugins() null zurückzuliefern. Dieser wird nicht verspottet, also wird er wahrscheinlich nur null zurückgeben, nein?
Verwandte Themen