Я пытаюсь создать тест для библиотеки, которая использует ByteBuffer
.
Упрощенная версия здесь:
public class ByteBufferTest {
public static class Stuff {
public void doSomething(Target target, ByteBuffer buffer) {
ByteBuffer slice = buffer.slice();
slice.limit(1);
target.accept(slice);
target.command();
buffer.position(1);
target.accept(buffer);
// do more with the buffer
buffer.get();
}
}
private interface Target {
void accept(ByteBuffer slice);
void command();
}
@Test
public void doSomething() {
final Stuff stuff = new Stuff();
final Target mockTarget = Mockito.mock(Target.class);
stuff.doSomething(mockTarget, ByteBuffer.wrap(new byte[]{1, 2, 3, 4}));
InOrder inOrder = Mockito.inOrder(mockTarget);
inOrder.verify(mockTarget).accept(ByteBuffer.wrap(new byte[]{1}));
inOrder.verify(mockTarget).command();
inOrder.verify(mockTarget).accept(ByteBuffer.wrap(new byte[]{2, 3, 4}));
}
}
Это прекрасно работает, если метод doSomething
не имеет buffer.get();
в конце.
Этот тест не пройден, потому что к моменту вызова inOrder.verify(mockTarget).accept(ByteBuffer.wrap(new byte[]{2, 3, 4}));
переданный аргумент был изменен после вызова buffer.get()
.
Есть ли способ проверить содержимое этого буфер во время вызова?