Search code examples
javaunit-testingjunitjmockit

JMockit: Testing Methods that override an Abstract Method


I currently have the following classes:

public abstract class superClass {
    abstract void abstractTest();
}

public class classForTesting extends superClass {
    @Override
    void abstractTest() {
        ...
    }
}

I am currently writing a unit test (using JUnit + JMockit) for classForTesting, but I'm not sure how to test abstractTest(). I tried mocking the superclass, but I still can't call abstractTest().

Any ideas will be greatly appreciated.

Thank you!


Solution

  • If you don't want abstractTest to be public, then test the method that calls abstractTest. I also changed the class names to start with a capital letter.

    public abstract class SuperClass {
        abstract void abstractTest();
    }
    
    public class ClassForTesting extends SuperClass {
        @Override
        void abstractTest() {
            ...
        }
    
        public void publicMethod() {
            abstractTest() 
        }
    
    }
    

    And now test publicMethod:

    public class PublicTest {
    
        private ClassForTesting classForTesting;
    
        @Before
        public void setUp(){
            classForTesting = ClassForTesting();
        }
    
        @Test
        public void testMethod() {
            classForTesting.publicMethod();
            ...
        }
    }