JUnit Easymock Unexpected method call

Lancelot picture Lancelot · Jan 22, 2010 · Viewed 32.5k times · Source

I'm trying to setup a test in JUnit w/ EasyMock and I'm running into a small issue that I can't seem to wrap my head around. I was hoping someone here could help.

Here is a simplified version of the method I'm trying to test:

public void myMethod() {
    //(...)
    Obj myObj = this.service.getObj(param);
    if (myObj.getExtId() != null) {
      OtherObj otherObj = new OtherObj();
      otherObj.setId(myObj.getExtId());
      this.dao.insert(otherObj);
    }
    //(...)
}

Ok so using EasyMock I've mocked the service.getObj(myObj) call and that works fine.

My problem comes when JUnit hits the dao.insert(otherObj) call. EasyMock throws a *Unexpected Method Call* on it.

I wouldn't mind mocking that dao in my test and using expectLastCall().once(); on it, but that assumes that I have a handle on the "otherObj" that's passed as a parameter at insert time... Which of course I don't since it's conditionally created within the context of the method being tested.

Anyone has ever had to deal with that and somehow solved it?

Thanks.

Answer

dplass picture dplass · May 31, 2010

You could also use EasyMock.isA(OtherObj.class) for a little more type safety.