Mockito:如何用嘲弄来测试我的Dao?

Unk*_*own 3 java junit spring dao mocking

我是junit和TDD的新手.我打算用Mockito测试我的dao.

道界面:

package com.test.SpringApp.dao;

import java.util.List;

import com.test.SpringApp.bean.Account;
import com.test.SpringApp.bean.Person;

public interface TestDao {
    List<Account> getAccountDetails(int account_id);
    Person getPersonDetails(int person_id);
}
Run Code Online (Sandbox Code Playgroud)

DaoImpl类代码:

package com.test.SpringApp.dao;

import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.apache.log4j.Logger;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import com.test.SpringApp.bean.Account;
import com.test.SpringApp.bean.Person;

public class TestDaoImpl implements TestDao {
    private static final Logger logger = Logger.getLogger(TestDaoImpl.class);
    private JdbcTemplate jdbcTemplate;

    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    @Override
    public List<Account> getAccountDetails(int account_id) {
        try {
            String query = "select * from account where account_id=?";
            SqlRowSet rowset = jdbcTemplate.queryForRowSet(query,account_id);
            Account account = null;
            List<Account> accountDetails = new ArrayList<Account>();
            while (rowset.next()) {
                account = new Account();
                account.setAccountId(rowset.getInt("accountid"));
                account.setAccountType(rowset.getString("accounttype"));
                accountDetails.add(account);
            }
            return accountDetails;
        } catch (Exception e) {
            // TODO: handle exception
            logger.info("Error :" + e.getMessage());
            return null;
        }
    }

    private Person getPersonDetails(int person_id) {
        try {
            String query = "select * from Person where person_id=?";
            SqlRowSet rowset = jdbcTemplate.queryForRowSet(query,person_id);
            Person person = null;
            while (rowset.next()) {
                person = new Person();
                person.setName(rowset.getString("name"));
                stage.setNumber(rowset.getInt("number"));
            }
            return person;
        } catch (Exception e) {
            // TODO: handle exception
            logger.info("Error :" + e.getMessage());
            return null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用上面提到的界面和类来从数据库获取帐户和人员详细信息.有人可以解释一下如何使用junit和Mockito为上面提到的dao接口和类编写测试用例.

帮助将不胜感激:)

Ral*_*lph 17

它接缝你误解了测试中的模拟概念.

假设你有一个班级A和一个班级B.Class A有一个方法mA(),它使用mB()B类中的方法来实现其功能.

如果您现在想要测试mA(),那么mA()将调用mB().在大多数情况下,这不是问题,但假设Class B是DAO,并且mB()是查询数据库的一些函数.然后,您需要一个数据库才能进行测试mA().现在假设您已经进行过测试,mB()而您只想测试mA().所以你可以用B模拟代替"模拟" mB().

在你的情况下,BTestDao/ TestDaoImpl.所以如果你想要模拟TestDao,那么你需要一些else(A)来测试,因为你无法测试模拟!