Search code examples
javagenericsmockingjmockit

How do I mock a method with generic objects in JMockit?


This question is self explanatory if you know how to use JMockit: How do I mock a method that has generics on it? I want to mock this method: public T save(T entity) but it always throws an exception like this:

mockit.RealMethodNotFoundForMockException: Corresponding real methods not found for the following mocks:
Object save(Object)
    at mockit.internal.RedefinitionEngine.modifyRealClass(RedefinitionEngine.java:130)
    at mockit.internal.RedefinitionEngine.modifyRealClass(RedefinitionEngine.java:88)
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:72)
    at mockit.Mockit.setUpMocks(Mockit.java:197)
    at com.mytest.MyTest.setUp(AdminManagerImplTest.java:83)

Solution

  • it does work for me, example

    package a;
    
    import junit.framework.TestCase;
    import mockit.Mockit;
    
    public class JMockitCoreExampleTest extends TestCase {
    
        public class MockMe {
            public T save(T t) {
                return null;
            }
        }
    
        public void testDoOperationAbc() {
            Mockit.redefineMethods(MockMe.class, SayThatYouMockMe.class);
                    MockMe mock = new MockMe();
            System.out.println(mock.save("aaa"));
        }
    
        public static class SayThatYouMockMe {
            public T save(T t) {
                return t;
            }
        }
    }
    

    output

    Loaded external tool: mockit.integration.junit3.JUnitTestCaseDecorator
    Loaded external tool: mockit.integration.junit4.JUnit4ClassRunnerDecorator
    aaa
    

    maybe you are mocking hibernate's save method? if so try using jmockit's hibernate3emul.jar