如何模拟抽象类?

时间:2016-09-20 02:16:27

标签: java unit-testing junit mockito

我正在嘲笑Abstract类但是它给出了一个错误,我无法实例化抽象类。我想我错过了一些嘲弄的基础知识。那么为什么我不能模拟抽象类呢?

@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");

        }

以下是我的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);

        }

我如何使用Mockito嘲笑这个?或者我是否需要使用别的东西来嘲笑这个? 如果我从mockito模拟,它会给我一个错误,无法实例化AbstractAccountDaoImpl

有什么建议吗?

0 个答案:

没有答案