具有lambda的Mockito参数捕获器(历史记录队列)
我已经实现了以下编年史队列,为此我想编写单元测试用例。如何在使用lambda时捕获ArgumentCaptor参数。我想在测试用例中获取writeBuffer来验证数据具有lambda的Mockito参数捕获器(历史记录队列),lambda,junit,mockito,chronicle-queue,Lambda,Junit,Mockito,Chronicle Queue,我已经实现了以下编年史队列,为此我想编写单元测试用例。如何在使用lambda时捕获ArgumentCaptor参数。我想在测试用例中获取writeBuffer来验证数据 public class Persister { public Persister(SingleChronicleQueue chronicle) { this.chronicle = chronicle; } public void write(int outBufferOffset) throws IOExcep
public class Persister {
public Persister(SingleChronicleQueue chronicle) {
this.chronicle = chronicle;
}
public void write(int outBufferOffset) throws IOException {
ExcerptAppender appender = chronicle.acquireAppender();
appender.writeBytes(b -> {
b.writeInt(outBufferOffset);
b.write(writeBuffer, 0 , outBufferOffset);
});}
}
测试用例:
@Mock
SingleChronicleQueue chronicle;
@Mock
ExcerptAppender appender;
@Captor
ArgumentCaptor<WriteBytesMarshallable> argumentCaptorLambda;
Persister persister = new Persister();
@Test
public void shouldPersistByteMessage() throws IOException {
persister.write(MESSAGEBYTES);
verify(appender).writeBytes(argumentCaptorLambda.capture());
WriteBytesMarshallable lastValue = argumentCaptorLambda.getValue();
//final byte[] persistedBytes = ?? how to get writeBuffer here ??
//assertThat(readPersistedMessage(persistedBytes), is(MESSAGE));
}
@Mock
单列编年史;
@嘲弄
摘录附录附录附录;
@俘虏
辩手辩手辩手;
Persister Persister=新的Persister();
@试验
public void shouldPersistByteMessage()引发IOException{
persister.write(MESSAGEBYTES);
验证(appender.writeBytes(argumentCaptorLambda.capture());
WriteBytesMarshallable lastValue=argumentCaptorLambda.getValue();
//最终字节[]persistedBytes=?如何在此处获取writeBuffer??
//断言(readPersistedMessage(persistedBytes),是(MESSAGE));
}
谢谢我已经使用doAnswer进行了此实现
@Captor
ArgumentCaptor<WriteBytesMarshallable> argumentCaptorLambda;
@Mock private BytesOut bytesOut;
public void shouldPersistReliableMessage() throws IOException {
doAnswer(invocationOnMock -> {
WriteBytesMarshallable marshallable = (WriteBytesMarshallable) invocationOnMock.getArguments()[0];
marshallable.writeMarshallable(bytesOut);
return null;
}).when(appender).writeBytes((WriteBytesMarshallable)any());
persister.persist(MESSAGEBYTES);
verify(bytesOut).writeInt(84);
verify(bytesOut).write(argumentCaptor.capture(), eq(0), eq(84));
assertThat(readPersistedMessage(argumentCaptor.getValue()), is(MESSAGE));
}
@Captor
辩手辩手辩手;
@模仿私人的琐事;
public void shouldPersisterLiableMessage()引发IOException{
doAnswer(调用锁定->{
WriteBytesMarshallable=(WriteBytesMarshallable)invocationOnMock.getArguments()[0];
可封送。可写可发(bytesOut);
返回null;
}).when(appender).writeBytes((writeBytes可调用)any());
persister.persist(MESSAGEBYTES);
验证(bytesOut)。写入(84);
验证(bytesOut).写入(argumentCaptor.capture(),等式(0),等式(84));
断言(readPersistedMessage(argumentCaptor.getValue())是(消息));
}
你能展示一下类的持久器吗?我已经在上面添加了类持久器的详细信息。