2016-09-09 50 views
0

需要快速幫助。我試圖寫一個測試類,並得到以下錯誤 「無法解析方法.thenreturn(org.apache.kafka.clients.producer)PowerMockito錯誤

@Test 
public void testPublishData_Success() throws java.lang.Exception { 
    when(GetPropValues.getPropValue(PublisherConstants.ATMID)).thenReturn("ATM"); 
    when(GetPropValues.getPropValue(PublisherConstants.DATA_SOURCE)).thenReturn("PCE"); 

    ReadAndWriteFiles mockFiles = Mockito.mock(ReadAndWriteFiles.class); 
    PowerMockito.whenNew(ReadAndWriteFiles.class).withNoArguments().thenReturn(mockFiles); 
    Mockito.when(mockFiles.getAllFiles()).thenReturn("someValue"); 

    KafkaProducer mockProducer = Mockito.mock(KafkaProducer.class); 
    PowerMockito.whenNew(KafkaProducer.class).withAnyArguments().thenReturn(mockProducer); 

    producer.publishData(null, "Test", "Data1"); 
} 

Powermockito是罰款,返回ReadAndWriteFiles.class對象,但它。拋出一個錯誤KafkaProducer.class在線

PowerMockito.whenNew(KafkaProducer.class).withAnyArguments().thenReturn(mockProducer); 

是否有任何其他的方式來進行這項工作各地的任何建議,可以理解

注:?KafkaProducer.class是不是一個自定義類但它的內部來自apa車火花卡夫卡庫

主要代碼是按以下

KafkaProducer<String, String> producer = new KafkaProducer<String, String>(props); 
      InputData inputMessage; 
      try { 
       inputMessage = populateData(timeStamp, dataCategory, data, atmId, topic); 
       ReadAndWriteFiles readerWriter = new ReadAndWriteFiles(); 
       File[] directory = readerWriter.getAllFiles(); 
       if (directory != null && directory.length > 0) { 
        if (connectionSet && !publishingData) { 
         sendDataFromFiles(producer, directory); 
         publishingData = false; 
        } 
       } else { 
        producer.send(keyedMsg, new KafkaResponseHandler(inputMessage)); 
       } 

      } catch (IOException e) { 

      } 

回答

0

我認爲錯誤是

KafkaProducer mockProducer = Mockito.mock(KafkaProducer.class); 
PowerMockito.whenNew(ReadAndWriteFiles.class).withAnyArguments().thenReturn(mockProducer) 

我想返回的值應該是ReadAndWriteFiles類不是KafkaProducer

一個模擬
ReadAndWriteFiles readMock = Mockito.mock(ReadAndWriteFiles.class) 
PowerMockito.whenNew(ReadAndWriteFiles.class).withAnyArguments().thenReturn(readMock) 

Mockito.when(readMock.getAllFiles()).thenReturn(anArrayOfFiles); 

4819的簽名方法如下

OngoingStubbing<T> [More ...] thenReturn(T value); 

所以,你正在使用,以返回ReadAndWriteFiles你shouls返回相同的類

+0

我需要檢查,如果我做一些愚蠢的事或沒有的對象,讓我檢查,並得到明天早上回到你身邊。並感謝您的幫助Koitoer。 – user3452558

+0

你說得對Koitoer,這是一個愚蠢的錯誤,我應該抓住我的自我。對不起浪費你的時間,再次感謝你的幫助。 – user3452558