gpt4 book ai didi

java - 为 DAO 编写测试用例的最佳 TDD 方法是什么?

转载 作者:行者123 更新时间:2023-11-30 02:44:47 27 4
gpt4 key购买 nike

由于我是 TDD 新手,所以我现在很难编写一些测试用例。比如我有这个dao方法,

public Customer getById(Long id) {
if (id < 1L) {
return null;
}
MapSqlParameterSource params = new MapSqlParameterSource("id", id);

return jdbcTemplate.queryForObject("select * from customer where id = :id", params, new RowMapper<Customer>() {

public Customer mapRow(ResultSet rs, int rowNum) throws SQLException {
return createCustomerFromResultSet(rs);
}
});
}

我希望对其进行负面测试。负面测试用例,

@Test
public void getByIdNegative() throws Exception {
Customer customer = customerDao.getById(-1L);
log.debug("Customer retrieved: " + customer);
assertNull(customer);
}

抛出异常,所以我在 dao 方法中编写了上面看到的 if 子句来解决它,但看起来这不是正确的方法。我应该期待异常(exception)吗?处理它?如果是的话,在哪一层以及如何进行?在这种情况下,阴性检测是必要的还是过度的?这是我现在脑子里的一些问题。我想知道如何按照正确的 TDD 原则干净地处理这个测试用例。

最佳答案

恕我直言,好的方法是从为您的方法编写 javadoc 开始。这就是它的规范。

它必须说明该方法执行什么操作、返回什么以及抛出什么异常。

queryForObject()指定它抛出 IncorrectResultSizeDataAccessException如果查询不正好返回一行。

您的方法也应该处理数据库中不存在 ID 的情况。它可以抛出相同的异常,或者抛出另一个异常,或者返回 null,或者返回一个空 Optional<Customer>而不是Customer 。这是的设计选择。

一旦做出选择,将其记录下来,并编写测试来验证此契约:

  1. 获取数据库中存在的客户时,检查该方法是否确实返回该客户
  2. 当获取数据库中不存在的客户时,请检查该方法是否抛出正确的异常或返回正确的值,具体取决于您的设计选择。

显然,使用 -1 进行测试,并为此特定标识符添加特殊情况是错误的。因为-1只是数据库中不存在的大量ID之一。该方法不得使测试通过。该方法必须执行其规范所述的操作。

关于java - 为 DAO 编写测试用例的最佳 TDD 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40509318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com