薰 风 2023-09-14 21:41 采纳率: 63.3%
浏览 6

spring data对dao进行测试

数据库中的表

img


dao类


//组件
@Repository
public class TuserDaoImpl implements TuserDao {
    Connection connection = JDBCUtils.getConnection();
    //注入模板对象
    @Autowired
    private JdbcTemplate jdbcTemplate;

    /*** sqring更改
     * 用户登录
     * @param username
     * @param password
     * @return
     */
    @Override
    public Tuser login(String username, String password) {
        String sql = "select id,username,password,email,role,flag,supercar from t_user where username=? and password=?";
        // 处理成RS结果集对象,查询单条数据用queryForObject,集合用query
        Tuser tuser = jdbcTemplate.queryForObject(sql,
                (ResultSet rs, int rowNUm) -> {
                    return new Tuser(rs.getInt("id"),
                            rs.getString("username"),
                            rs.getString("password"),
                            rs.getString("email"),
                            rs.getInt("role"),
                            rs.getInt("flag"),
                            rs.getInt("supercar")
                    );
                }
                , username, password);
        if(tuser==null) return null;
        return tuser;
    }
}

第一次测试类,本次测试输入的是正确的用户名和密码,返回的是一个对象

//测试类包目录 要和 容器类一样
//单元测试类
//指定当前测试环境为spring测试环境
@RunWith(SpringJUnit4ClassRunner.class)
// Context: 容器,上下文
@ContextConfiguration(classes = {AppConfig.class})
public class LoginTest {
    @Autowired
    private TuserDaoImpl tuserDao;
    @Test
    public void login(){
    
        Tuser login = tuserDao.login("燃烧的西瓜", "e10adc3949ba59abbe56e057f20f883e");
        System.out.println(login);
    }
}

第一次测试类结果

img


=重点来了

第二次测试类,输入错误的用户名或密码,会出现报错

//测试类包目录 要和 容器类一样
//单元测试类
//指定当前测试环境为spring测试环境
@RunWith(SpringJUnit4ClassRunner.class)
// Context: 容器,上下文
@ContextConfiguration(classes = {AppConfig.class})
public class LoginTest {
    @Autowired
    private TuserDaoImpl tuserDao;
    @Test
    public void login(){
        //dao中如果是错的用户名,该怎么不出现报错,而显示一个null
        Tuser login = tuserDao.login("燃烧的西瓜1", "e10adc3949ba59abbe56e057f20f883e");
        System.out.println(login);
    }
}

img


报错图片

img

问:如果我在第二次测试类中,故意输入错误的用户名,会出现报错,如何让输入错误了用户名或密码不进行报错,
而是返回一个null

  • 写回答

2条回答 默认 最新

  • 关注

    你用 jdbcTemplate 的 queryForObject 方法,查询无数据,或者多条都会抛出异常的。
    建议使用 query 方法自己来处理结果集,就能分别处理返回为空、1条、多条的情况。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月14日