Skip to content

Commit

Permalink
core: Use real ByteBuffer instead of mock (grpc#9523)
Browse files Browse the repository at this point in the history
My motivation for making this change is that [`ByteBuffer` is becoming
`sealed`](https://download.java.net/java/early_access/loom/docs/api/java.base/java/nio/ByteBuffer.html)
in new versions of Java. This makes it impossible for Mockito's
_current_ default mockmaker to mock it.

That said, Mockito will likely [switch its default
mockmaker](mockito/mockito#2589) to an
alternative that _is_ able to mock `sealed` classes. However, there are
downside to that, such as [slower
performance](mockito/mockito#2589 (comment)),
so it's probably better to leave our options open by avoiding mocking at
all.

And in this case, it's equally easy to use real objects.

As a bonus, I think that real objects makes the code a little easier to
follow: Before, we created mocks that the code under test never
interacted with in any way. (The code just passed them through to a
delegate.) When I first read the tests, I was confused, since I assumed
that the mock we were creating was the same mock that we then passed to
`verify` at the end of the method. That turned out not to be the case.
  • Loading branch information
cpovirk authored and larry-safran committed Oct 6, 2022
1 parent 1414e25 commit ead8ab6
Showing 1 changed file with 4 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,10 @@
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

/**
* Tests for {@link ForwardingReadableBuffer}.
*/
/** Tests for {@link ForwardingReadableBuffer}. */
@RunWith(JUnit4.class)
public class ForwardingReadableBufferTest {
@Rule
public final MockitoRule mocks = MockitoJUnit.rule();
@Rule public final MockitoRule mocks = MockitoJUnit.rule();

@Mock private ReadableBuffer delegate;
private ForwardingReadableBuffer buffer;
Expand All @@ -55,10 +52,7 @@ public void setUp() {
@Test
public void allMethodsForwarded() throws Exception {
ForwardingTestUtil.testMethodsForwarded(
ReadableBuffer.class,
delegate,
buffer,
Collections.<Method>emptyList());
ReadableBuffer.class, delegate, buffer, Collections.<Method>emptyList());
}

@Test
Expand Down Expand Up @@ -99,7 +93,7 @@ public void readBytes() {

@Test
public void readBytes_overload1() {
ByteBuffer dest = mock(ByteBuffer.class);
ByteBuffer dest = ByteBuffer.allocate(0);
buffer.readBytes(dest);

verify(delegate).readBytes(dest);
Expand Down

0 comments on commit ead8ab6

Please sign in to comment.