1

I'm mocking Abstract class but it gives an error that I can't instantiate the abstract class. I guess I'm missing some basics of mocking. So why can't I mock abstract class?

@Repository
    public abstract class AbstractAccountDaoImpl implements AccountDao{

        @Autowired
        SimpleJdbcCall simpleJdbcCall;

        @Override
        public List<Account> getAccounts(String id){
            SimpleJdbcCall simpleJdbcCall = getNewSimpleJdbcCall()
                    .withProcedureName(getAccountsProc)
                    .declareParameters(new SqlParameter("account_id", Types.VARCHAR));

                Object[] params = new Object[]  {id};
                simpleJdbcCall.returningResultSet("result", new AccountRowMapper());

                Map<String, Object> map = simpleJdbcCall.execute(params);

                return (List<Account>) map.get("result");

        }

Below is my JUnit:

public class AbstractAccountDaoImplTest  {

       private String IDS = "IDS";

    @InjectMocks
    private AbstractAccountDaoImpl abstractAccountDaoImpl;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void shouldReturnAccounts() {
        Map<String, Object> map = new HashMap<>();

        map.put("result", Arrays.asList(new Account(), new Account()));

        simpleJdbcCallDefaultMock(simpleJdbcCallProvider, map);

        List<Account> resultList = abstractAccountDaoImpl.getAccounts(IDS);
        assertEquals(2, resultList.size());
    }

     public static void simpleJdbcCallDefaultMock(SimpleJdbcCallProvider simpleJdbcCallProvider, Map<String, Object> map) {
        SimpleJdbcCall simpleJdbcCall = Mockito.mock(SimpleJdbcCall.class);

        when(simpleJdbcCallProvider.getNewSimpleJdbcCall()).thenReturn(simpleJdbcCall);

        }

How can I mock this using Mockito? Or do I need to use something else to mock this? If I mock from mockito, it gives me an error cannot instantiate AbstractAccountDaoImpl.

Any advice?

Atul Dwivedi
  • 1,452
  • 16
  • 29
zachandcode
  • 151
  • 3
  • 10
  • 6
    See this http://stackoverflow.com/questions/7569444/how-to-test-abstract-class-in-java-with-junit – Evgeniy K. Sep 20 '16 at 02:28
  • 1
    You're not mocking anything. You're trying to inject mocks into an instance of AbstractAccountDaoImpl. Create a concrete subclass, and test that. – JB Nizet Sep 20 '16 at 06:35

0 Answers0