Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using withCapture followed by assertEquals gives MissingInvocation of equals #361

aaamos opened this issue Nov 22, 2016 · 0 comments


Copy link

@aaamos aaamos commented Nov 22, 2016

  • Version of JMockit that was used: 1.19, also confirmed in 1.29

  • Description of the problem or enhancement request:

I'm using withCapture() in a Verifications block to make sure a called method uses the expected parameter. Then I'd like to use assertEquals to make sure the captured parameter is what I expect - in my case a LocalDateTime; I haven't been able to reproduce the same issue with other classes.

Instead of the assertEquals telling me what I want to know, though, I get the following:

mockit.internal.MissingInvocation: Missing invocation of: java.time.LocalDateTime#equals(Object)

It's as though JMockit is considering the call to equals() used by assertEquals() part of the code to be verified.

Here's a simplified, self-contained test case demonstrating the bug:

package temp;

import static org.junit.Assert.assertEquals;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import org.junit.Test;
import mockit.Expectations;
import mockit.Mocked;
import mockit.Tested;
import mockit.Verifications;

public class WithCaptureTest {

  private TestedClass testedInstance;

  public void testWithCaptureBug(@Mocked MockedClass mockedInstance) {
    LocalDateTime startOfJanuary = LocalDateTime.of(2016, 1, 1, 0, 0);
    LocalDateTime startOfFebruary = LocalDateTime.of(2016, 2, 1, 0, 0);
    // @autoformat:off
    new Expectations(LocalDateTime.class) {{
      LocalDateTime.ofInstant((Instant) any, (ZoneId) any); result = startOfJanuary;
    }}; // @autoformat:on


    // @autoformat:off
    new Verifications() {{
      LocalDateTime usedDateTime;
      mockedInstance.doSomethingWithDateTime(usedDateTime = withCapture());
      assertEquals(usedDateTime, startOfFebruary);
    }}; // @autoformat:on

  public static class TestedClass {

    public void doSomething() {
      Date date = new Date();
      LocalDateTime adjustedDateTime = LocalDateTime.ofInstant(date.toInstant(),
      MockedClass toBeMocked = new MockedClass();

  public static class MockedClass {

    public void doSomethingWithDateTime(LocalDateTime dateTime) {
      // do something...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

No branches or pull requests

2 participants