PowerMockito 错误
PowerMockito Error
需要快速帮助。我正在尝试编写测试 class 并遇到以下错误
“无法解析方法 .thenreturn(org.apache.kafka.clients.producer)
@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 不是自定义 class,而是来自 apache spark kafka 库
主要代码如下
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) {
}
我认为错误是
KafkaProducer mockProducer = Mockito.mock(KafkaProducer.class);
PowerMockito.whenNew(ReadAndWriteFiles.class).withAnyArguments().thenReturn(mockProducer)
我认为 returned 值应该是 ReadAndWriteFiles
class 的模拟值,而不是 KafkaProducer
ReadAndWriteFiles readMock = Mockito.mock(ReadAndWriteFiles.class)
PowerMockito.whenNew(ReadAndWriteFiles.class).withAnyArguments().thenReturn(readMock)
Mockito.when(readMock.getAllFiles()).thenReturn(anArrayOfFiles);
thenReturn
方法的签名如下
OngoingStubbing<T> [More ...] thenReturn(T value);
所以你正在使用 return 一个 ReadAndWriteFiles
你应该 return 一个相同的对象 class
需要快速帮助。我正在尝试编写测试 class 并遇到以下错误 “无法解析方法 .thenreturn(org.apache.kafka.clients.producer)
@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 不是自定义 class,而是来自 apache spark kafka 库
主要代码如下
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) {
}
我认为错误是
KafkaProducer mockProducer = Mockito.mock(KafkaProducer.class);
PowerMockito.whenNew(ReadAndWriteFiles.class).withAnyArguments().thenReturn(mockProducer)
我认为 returned 值应该是 ReadAndWriteFiles
class 的模拟值,而不是 KafkaProducer
ReadAndWriteFiles readMock = Mockito.mock(ReadAndWriteFiles.class)
PowerMockito.whenNew(ReadAndWriteFiles.class).withAnyArguments().thenReturn(readMock)
Mockito.when(readMock.getAllFiles()).thenReturn(anArrayOfFiles);
thenReturn
方法的签名如下
OngoingStubbing<T> [More ...] thenReturn(T value);
所以你正在使用 return 一个 ReadAndWriteFiles
你应该 return 一个相同的对象 class