Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mockito error : org.mockito.exceptions.misusing.InvalidUseOfMatchersException

I have the below code

public void testInitializeButtons() {
        model.initializeButtons();
        verify(controller, times(1)).sendMessage(
                eq(new Message(eq(Model.OutgoingMessageTypes.BUTTON_STATUSES_CHANGED),
                        eq(new ButtonStatus(anyBoolean(), eq(false), eq(false), eq(false), eq(false))),
                        anyObject())));
    }

which throws the following exception

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
1 matchers expected, 9 recorded.
This exception may occur if matchers are combined with raw values:
    //incorrect:
    someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
    //correct:
    someMethod(anyObject(), eq("String by matcher"));

For more info see javadoc for Matchers class.
    at se.cambiosys.client.medicalrecords.model.MedicalRecordPanelModelTest.testInitializeButtons(MedicalRecordPanelModelTest.java:88)

Can someone point to me how to write the test correctly?

like image 665
Can't Tell Avatar asked Jul 19 '12 07:07

Can't Tell


1 Answers

You can't do that: eq() can be used only for the mocked method parameters, not inside other objects (like you did in the constructor of Message). I see three options:

  • Write a custom matcher
  • Use an ArgumentCaptor, and test the properties of the Message with asserts()
  • Implement equals() in the Message class in order to test equality with another Message, based upon the fields you actually want to verify.
like image 140
Flavio Avatar answered Sep 28 '22 07:09

Flavio